diff --git a/src/evaluator.rs b/src/evaluator.rs index 5e4dc8e..a75142c 100644 --- a/src/evaluator.rs +++ b/src/evaluator.rs @@ -108,13 +108,18 @@ mod test { #[case("[1 (+ 1 2)]", "[1 3]")] #[case("{}", "{}")] #[case("{:a \"uwu\"}", "{:a: uwu}")] + // Lists #[case("(list 1 2 3)", "(1 2 3)")] #[case("(list? (list))", "true")] + #[case("(list? 23)", "false")] + // Vectors #[case("(vector 1 2 3)", "[1 2 3]")] #[case("(vector? [])", "true")] - // Unsure how to test this due to hashmaps being unordered - // #[case("(hashmap :a 1 :b 2)", "{:a: 1, :b: 2}")] + #[case("(vector? 23)", "false")] + // Hashmaps + #[case("(hashmap :a 1)", "{:a: 1}")] #[case("(hashmap? {})", "true")] + #[case("(hashmap? 23)", "false")] // Environment manipulation #[case("(define! asdf (+ 2 2)) (+ asdf 2)", "4\n6")] #[case("(let* (a 2) (+ a 2))", "4")] @@ -131,6 +136,11 @@ mod test { // Boolean operations #[case("(eq? 1 1)", "true")] #[case("(eq? 1 2)", "false")] + #[case("(eq? true true)", "true")] + #[case("(eq? true false)", "false")] + #[case("(eq? \"blue\" \"blue\")", "true")] + #[case("(eq? \"blue\" \"red\")", "false")] + #[case("(eq? nil nil)", "true")] #[case("(not false)", "true")] #[case("(not true)", "false")] #[case("(not nil)", "false")]