From 02374995e7050f311dc9676f47905f1c4a12f757 Mon Sep 17 00:00:00 2001 From: ghostly_zsh Date: Fri, 9 Aug 2024 10:06:41 -0500 Subject: [PATCH] a few tests --- kabel/src/lib.rs | 3 ++ kabel_test/src/main.rs | 14 +++++--- kabel_test/test/lexer/arithmetic.kab | 2 ++ kabel_test/test/lexer/arithmetic.out | 1 + kabel_test/test/runtime/arithmetic_run.kab | 13 +++++++ kabel_test/test/runtime/arithmetic_run.out | 12 +++++++ kabel_test/test/runtime/if_statement.kab | 40 ++++++++++++++++++++++ kabel_test/test/runtime/if_statement.out | 7 ++++ kabel_test/test/runtime/logic.kab | 39 +++++++++++++++++++++ kabel_test/test/runtime/logic.out | 31 +++++++++++++++++ 10 files changed, 158 insertions(+), 4 deletions(-) create mode 100644 kabel_test/test/runtime/arithmetic_run.kab create mode 100644 kabel_test/test/runtime/arithmetic_run.out create mode 100644 kabel_test/test/runtime/if_statement.kab create mode 100644 kabel_test/test/runtime/if_statement.out create mode 100644 kabel_test/test/runtime/logic.kab create mode 100644 kabel_test/test/runtime/logic.out diff --git a/kabel/src/lib.rs b/kabel/src/lib.rs index 8e468ff92e9a310204e317f31a9ec230e3d4c07b..220b3a3ee5b04d67a4b7da42c4231b260f0dba7e 100644 --- a/kabel/src/lib.rs +++ b/kabel/src/lib.rs @@ -94,6 +94,9 @@ pub fn compile(program: String) -> String { output += &error.to_string(); output += "\n"; } + if analyzer.errors.len() != 0 { + return output; + } #[cfg(feature = "timer")] { let analyzer_elapsed = analyzer_instant.elapsed(); diff --git a/kabel_test/src/main.rs b/kabel_test/src/main.rs index d864c090f4c9e86c439e4b3339edd6bac9a0af95..d325170cb3e5de31c608eb98eb68ad1cec2872ba 100644 --- a/kabel_test/src/main.rs +++ b/kabel_test/src/main.rs @@ -1,13 +1,15 @@ //use std::{env, fs}; +use std::{env, fs}; + use kabel::{debug::{debug_ast, debug_bytecode, debug_token_array}, run_codegen, run_lexer, run_parser, run_semantic_analysis}; fn main() { - /*let args: Vec = env::args().collect(); + let args: Vec = env::args().collect(); let program = - fs::read_to_string(args[1].clone()).unwrap();*/ + fs::read_to_string(args[1].clone()).unwrap(); - let program = + /*let program = "if(true) { print \"if\"; } else if(true) { @@ -16,7 +18,7 @@ fn main() { print \"else\"; } print \"after\"; -".to_string(); +".to_string();*/ let mut output = "".to_string(); @@ -51,6 +53,10 @@ print \"after\"; output += &error.to_string(); output += "\n"; } + if analyzer.errors.len() != 0 { + println!("{}", output); + return; + } let codegen = run_codegen(program, ast); diff --git a/kabel_test/test/lexer/arithmetic.kab b/kabel_test/test/lexer/arithmetic.kab index 7f8c6fe39ab8439e91889f0cbc32837cba5105c8..6518e71a462053dc23d0c2e5726017eaafe76392 100644 --- a/kabel_test/test/lexer/arithmetic.kab +++ b/kabel_test/test/lexer/arithmetic.kab @@ -8,3 +8,5 @@ 6%4 3 * (8 + 4) + +3.0 diff --git a/kabel_test/test/lexer/arithmetic.out b/kabel_test/test/lexer/arithmetic.out index 88319ab72fb8334455fe0c88bfbef5717235adb7..26bb68e0b18c2c891f36108744e82844a0c73b60 100644 --- a/kabel_test/test/lexer/arithmetic.out +++ b/kabel_test/test/lexer/arithmetic.out @@ -26,3 +26,4 @@ Num 8 Plus Num 4 RightParen +Num 3 diff --git a/kabel_test/test/runtime/arithmetic_run.kab b/kabel_test/test/runtime/arithmetic_run.kab new file mode 100644 index 0000000000000000000000000000000000000000..0f32dd27584493f50bfff52cc6379c2d0a603982 --- /dev/null +++ b/kabel_test/test/runtime/arithmetic_run.kab @@ -0,0 +1,13 @@ +print 2+2; // 4 +print 2+2*3; // 8 +print 2 - 2; // 0 +print 2.1+2.3*3; // 9 +print 2 / 4; // 0.5 +print 5 % 4; // 1 +print 2 / -4; // -0.5 +print 5 * 4 / 2; // 10 +print 4 * 5 / 2; // 10 + +print 3 & 8 + 4; // 0 +print 4 ^ 7; // 3 +print 8 | 2; // 10 diff --git a/kabel_test/test/runtime/arithmetic_run.out b/kabel_test/test/runtime/arithmetic_run.out new file mode 100644 index 0000000000000000000000000000000000000000..8424d9aad9934ae2be6bf547ba93024d6df1c61d --- /dev/null +++ b/kabel_test/test/runtime/arithmetic_run.out @@ -0,0 +1,12 @@ +4 +8 +0 +9 +0.5 +1 +-0.5 +10 +10 +0 +3 +10 diff --git a/kabel_test/test/runtime/if_statement.kab b/kabel_test/test/runtime/if_statement.kab new file mode 100644 index 0000000000000000000000000000000000000000..4287b12c87b176ec7e5e7254091f4b5f00b2c658 --- /dev/null +++ b/kabel_test/test/runtime/if_statement.kab @@ -0,0 +1,40 @@ +if(5 == 4) { + print 1; +} else { + print 3; +} +print 4; + +if(1 < 3) { + print 2; +} + +if(5 >= 5) { + print 8; +} else if(false) { + print 9; +} else { + print 6; +} + +if(false) { + print 3; +} else if(true) { + print 4; +} else { + print 6; +} + +if(2 < 4) { + print "foo"; +} else { + print "bar"; +} + +if(false) { + print 5; +} else if(false) { + print 0; +} else { + print 1; +} diff --git a/kabel_test/test/runtime/if_statement.out b/kabel_test/test/runtime/if_statement.out new file mode 100644 index 0000000000000000000000000000000000000000..dbe9cf5c21d72f4301869cf368210e42e2561bba --- /dev/null +++ b/kabel_test/test/runtime/if_statement.out @@ -0,0 +1,7 @@ +3 +4 +2 +8 +4 +foo +1 diff --git a/kabel_test/test/runtime/logic.kab b/kabel_test/test/runtime/logic.kab new file mode 100644 index 0000000000000000000000000000000000000000..ece37d0aa8b1aacb65e86a67494fc47c2497aa65 --- /dev/null +++ b/kabel_test/test/runtime/logic.kab @@ -0,0 +1,39 @@ +print 2 == 2; // true +print 3 == 2; // false +print "hi" == "hi"; // true +print "hi" == 2; // false +print "hi" == "true"; // false + +print 2 != 2; // false +print 5 != 2; // true +print "hi" != "hi"; // false + +print 2 > 3; // false +print 3 > 3; // false +print 5 > 3; // true + +print 2 >= 3; // false +print 3 >= 3; // true +print 5 >= 3; // true + +print 2 < 3; // true +print 3 < 3; // false +print 5 < 3; // false + +print 2 <= 3; // true +print 3 <= 3; // true +print 5 <= 3; // false + +print true && true; // true +print false && true; // false +print true && false; // false +print false && false; // false + +print true || true; // true +print false || true; // true +print true || false; // true +print false || false; // false + +print 5 > 2 || 2 < 3*2; // true +print 2 < 4 && 5 > 2 || 9 < 8; // true +print false && true && false; // false diff --git a/kabel_test/test/runtime/logic.out b/kabel_test/test/runtime/logic.out new file mode 100644 index 0000000000000000000000000000000000000000..ead947887aee8182211a50eaafe83bdec5123aa5 --- /dev/null +++ b/kabel_test/test/runtime/logic.out @@ -0,0 +1,31 @@ +true +false +true +false +false +false +true +false +false +false +true +false +true +true +true +false +false +true +true +false +true +false +false +false +true +true +true +false +true +true +false