aboutsummaryrefslogtreecommitdiffstats
path: root/src/test.rs
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2021-11-24 09:18:17 +0200
committerJan Tuomi <jans.tuomi@gmail.com>2021-11-25 09:53:44 +0200
commit2a2fe4c5e8487185cc08da687e7a781c58d9d19c (patch)
tree717fa2a978097a6ce76b39e677fef804c161d914 /src/test.rs
parentfecbbec2d8d24639d4178f92fe0585d777165250 (diff)
Add test for builtin int.add
Diffstat (limited to 'src/test.rs')
-rw-r--r--src/test.rs61
1 files changed, 55 insertions, 6 deletions
diff --git a/src/test.rs b/src/test.rs
index 58f9e84..10d907c 100644
--- a/src/test.rs
+++ b/src/test.rs
@@ -31,7 +31,7 @@ fn initialize_before_test() {
#[test]
#[serial]
-fn test_reduce_integer_primitive() -> Result<(), String> {
+fn reduce_integer_primitive() -> Result<(), String> {
initialize_before_test();
let term = Term::Primitive(Value::Integer(123));
let (result_term, _) = reduce_term(&HashMap::new(), Rc::new(term.clone()), &None, false)?;
@@ -41,7 +41,7 @@ fn test_reduce_integer_primitive() -> Result<(), String> {
#[test]
#[serial]
-fn test_reduce_string_primitive() -> Result<(), String> {
+fn reduce_string_primitive() -> Result<(), String> {
initialize_before_test();
let term = Term::Primitive(Value::String(String::from("foobar")));
let (result_term, _) = reduce_term(&HashMap::new(), Rc::new(term.clone()), &None, false)?;
@@ -51,7 +51,7 @@ fn test_reduce_string_primitive() -> Result<(), String> {
#[test]
#[serial]
-fn test_reduce_id_call() -> Result<(), String> {
+fn reduce_id_call() -> Result<(), String> {
initialize_before_test();
let source = "
id 1;
@@ -69,7 +69,7 @@ fn test_reduce_id_call() -> Result<(), String> {
#[test]
#[serial]
-fn test_reduce_id_call_negative() -> Result<(), String> {
+fn reduce_id_call_negative() -> Result<(), String> {
initialize_before_test();
let source = "
id 1;
@@ -87,7 +87,7 @@ fn test_reduce_id_call_negative() -> Result<(), String> {
#[test]
#[serial]
-fn test_define_parameterized_func() -> Result<(), String> {
+fn define_parameterized_func() -> Result<(), String> {
initialize_before_test();
let source = "
f a b = b a;
@@ -115,7 +115,7 @@ fn test_define_parameterized_func() -> Result<(), String> {
#[test]
#[serial]
-fn test_reduce_parameterized_func() -> Result<(), String> {
+fn reduce_parameterized_func() -> Result<(), String> {
initialize_before_test();
let source = "
f 10 id;
@@ -146,3 +146,52 @@ fn test_reduce_parameterized_func() -> Result<(), String> {
assert_eq!(*result_term, expected);
Ok(())
}
+
+#[test]
+#[serial]
+fn reduce_builtin_int_add() -> Result<(), String> {
+ initialize_before_test();
+ let source = "
+ int.add;
+ int.add 10;
+ int.add 10 20;
+ ";
+
+ let (terms, symbol_table) = evaluate_from_source(String::from(source), None)?;
+ assert_eq!(terms.len(), 3);
+ let term1 = &terms[0];
+ let term2 = &terms[1];
+ let term3 = &terms[2];
+
+ // First expression
+ let (result_term1, _) = repeatedly_reduce_term(&symbol_table, Rc::clone(term1), &None, false)?;
+ let expected1_identifier = builtins::B_INTEGER_ADD;
+ let result_builtin1 = match &*result_term1 {
+ Term::Builtin(b) => b,
+ _ => return Err(format!("{} is not a builtin", result_term1)),
+ };
+
+ assert_eq!(result_builtin1.identifier, expected1_identifier);
+
+ // Second expression
+ let (result_term2, _) = repeatedly_reduce_term(&symbol_table, Rc::clone(term2), &None, false)?;
+ let expected2_identifier = builtins::B_INTEGER_ADD_1;
+ let result_builtin2 = match &*result_term2 {
+ Term::Builtin(b) => b,
+ _ => return Err(format!("{} is not a builtin", result_term2)),
+ };
+
+ assert_eq!(result_builtin2.identifier, expected2_identifier);
+
+ // Third expression
+ let (result_term3, _) = repeatedly_reduce_term(&symbol_table, Rc::clone(term3), &None, false)?;
+ let expected3 = Value::Integer(30);
+ let result_builtin3 = match &*result_term3 {
+ Term::Primitive(p) => p,
+ _ => return Err(format!("{} is not a primitive", result_term3)),
+ };
+
+ assert_eq!(*result_builtin3, expected3);
+
+ Ok(())
+}