From 75eb8799939e4582987e3a7fa126a20e2b0bb05a Mon Sep 17 00:00:00 2001 From: haxala1r Date: Fri, 3 Oct 2025 22:57:28 +0300 Subject: [PATCH] Added extra test cases for parsing quotes and symbols, also change symbols to always be uppercase --- src/parse.cpp | 3 +++ src/tests/test.cpp | 22 +++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/parse.cpp b/src/parse.cpp index 0900692..985e6be 100644 --- a/src/parse.cpp +++ b/src/parse.cpp @@ -1,6 +1,8 @@ +#include #include #include +#include #include #include @@ -31,6 +33,7 @@ String Parser::make_string(string s) { } Symbol Parser::make_symbol(string s) { + transform(s.begin(), s.end(), s.begin(), ::toupper); return Symbol {s}; } diff --git a/src/tests/test.cpp b/src/tests/test.cpp index cddd63f..a4fa1ed 100644 --- a/src/tests/test.cpp +++ b/src/tests/test.cpp @@ -32,7 +32,7 @@ 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 == "PRINT"); REQUIRE(get(pop_and_front(dq)).value == "hello world"); } SECTION("doubles") { @@ -63,5 +63,25 @@ TEST_CASE("Parser parses correctly", "[Parser]") { REQUIRE(get(pop_and_front(l22)).value == 2); REQUIRE(get(pop_and_front(l23)).value == 3); } + SECTION("Nested quotes") { + Parser p(Lexer("((('a 'b 'c 'd)))")); + auto l0 = get(*p.next()).list; + auto l1 = get(pop_and_front(l0)).list; + auto l2 = get(pop_and_front(l1)).list; + + auto l20 = get(pop_and_front(l2)).list; + auto l21 = get(pop_and_front(l2)).list; + auto l22 = get(pop_and_front(l2)).list; + auto l23 = get(pop_and_front(l2)).list; + + REQUIRE(get(pop_and_front(l20)).value == "QUOTE"); + REQUIRE(get(pop_and_front(l20)).value == "A"); + REQUIRE(get(pop_and_front(l21)).value == "QUOTE"); + REQUIRE(get(pop_and_front(l21)).value == "B"); + REQUIRE(get(pop_and_front(l22)).value == "QUOTE"); + REQUIRE(get(pop_and_front(l22)).value == "C"); + REQUIRE(get(pop_and_front(l23)).value == "QUOTE"); + REQUIRE(get(pop_and_front(l23)).value == "D"); + } }