diff --git a/src/tests/test.cpp b/src/tests/test.cpp index 7ac873f..6960147 100644 --- a/src/tests/test.cpp +++ b/src/tests/test.cpp @@ -1,7 +1,16 @@ +#include "value.hpp" #include #include +#include using namespace std; +template +T pop_and_front(deque &dq) { + T t = dq.front(); + dq.pop_front(); + return t; +} + TEST_CASE("Lexer lexes doubles correctly", "[Lexer]") { SECTION("double and negative syntax") { @@ -19,3 +28,25 @@ TEST_CASE("Lexer lexes doubles correctly", "[Lexer]") { } } +TEST_CASE("Parser parses correctly", "[Parser]") { + SECTION("hello world") { + Parser p (Lexer("(print \"hello world\")")); + auto dq = get(*p.next()).list; + REQUIRE(get(pop_and_front(dq)).value == "print"); + REQUIRE(get(pop_and_front(dq)).value == "hello world"); + } + SECTION("doubles") { + Parser p (Lexer("(1.0 0.1 -.1 -1. . - -. .-)")); + auto dq = get(*p.next()).list; + REQUIRE(get(pop_and_front(dq)).value == 1.0); + REQUIRE(get(pop_and_front(dq)).value == 0.1); + REQUIRE(get(pop_and_front(dq)).value == -0.1); + REQUIRE(get(pop_and_front(dq)).value == -1.0); + REQUIRE(get(pop_and_front(dq)).value == "."); + REQUIRE(get(pop_and_front(dq)).value == "-"); + REQUIRE(get(pop_and_front(dq)).value == "-."); + REQUIRE(get(pop_and_front(dq)).value == ".-"); + + } +} +