From 84d900443e88f830bdbef6f4c485c543dea94082 Mon Sep 17 00:00:00 2001 From: Philip O Toole Date: Mon, 31 Oct 2016 16:16:30 -0400 Subject: [PATCH] Unit test, and correct, stack --- sql/parser.go | 2 +- sql/parser_test.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/sql/parser.go b/sql/parser.go index 5f512583..ba82a7e4 100644 --- a/sql/parser.go +++ b/sql/parser.go @@ -25,7 +25,7 @@ func (s *stack) pop() rune { return rune(0) } c := s.c[len(s.c)-1] - s.c = s.c[:len(s.c)] + s.c = s.c[:len(s.c)-1] return c } diff --git a/sql/parser_test.go b/sql/parser_test.go index d92ffd14..e035b963 100644 --- a/sql/parser_test.go +++ b/sql/parser_test.go @@ -10,3 +10,55 @@ func Test_ScannerNew(t *testing.T) { t.Fatalf("failed to create basic Scanner") } } + +func Test_stackEmpty(t *testing.T) { + s := newStack() + if !s.empty() { + t.Fatal("new stack is not empty") + } + + if s.peek() != rune(0) { + t.Fatal("peek of empty stack does not return correct value") + } +} + +func Test_stackSingle(t *testing.T) { + s := newStack() + s.push('x') + if s.empty() { + t.Fatal("non-empty stack marked as empty") + } + + if s.peek() != 'x' { + t.Fatal("peek of single stack does not return correct value") + } + + if s.pop() != 'x' { + t.Fatal("pop of single stack does not return correct value") + } + + if !s.empty() { + t.Fatal("popped stack is not empty") + } +} + +func Test_stackMulti(t *testing.T) { + s := newStack() + s.push('x') + s.push('y') + s.push('z') + + if s.pop() != 'z' { + t.Fatal("pop of 1st multi stack does not return correct value") + } + if s.pop() != 'y' { + t.Fatal("pop of 2nd multi stack does not return correct value") + } + if s.pop() != 'x' { + t.Fatal("pop of 3rd multi stack does not return correct value") + } + + if !s.empty() { + t.Fatal("popped multi stack is not empty") + } +}