diff options
Diffstat (limited to 'js/scripting-lang/tests/unit/18_new_table_operations.txt')
-rw-r--r-- | js/scripting-lang/tests/unit/18_new_table_operations.txt | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/js/scripting-lang/tests/unit/18_new_table_operations.txt b/js/scripting-lang/tests/unit/18_new_table_operations.txt new file mode 100644 index 0000000..fa9acd4 --- /dev/null +++ b/js/scripting-lang/tests/unit/18_new_table_operations.txt @@ -0,0 +1,118 @@ +/* Unit Test: New Table Operations (t.shape, t.append, t.prepend) */ + +..out "=== Testing New Table Operations ==="; + +/* ===== t.shape TESTS ===== */ + +/* Test t.shape on array-like table */ +arr : {1, 2, 3, 4, 5}; +arr_shape : t.shape arr; +..assert arr_shape.size = 5; +..assert arr_shape.type = "array"; + +/* Test t.shape on object-like table */ +obj : {name: "Alice", age: 30, city: "NYC"}; +obj_shape : t.shape obj; +..assert obj_shape.size = 3; +..assert obj_shape.type = "object"; + +/* Test t.shape on mixed table (non-sequential keys) */ +mixed : {1: "one", 3: "three", name: "test"}; +mixed_shape : t.shape mixed; +..assert mixed_shape.size = 3; +..assert mixed_shape.type = "object"; + +/* Test t.shape on empty table */ +empty : {}; +empty_shape : t.shape empty; +..assert empty_shape.size = 0; +..assert empty_shape.type = "array"; + +/* ===== t.append TESTS ===== */ + +/* Test t.append on array-like table */ +numbers : {1, 2, 3}; +appended : t.append numbers 4; +..assert appended[1] = 1; +..assert appended[2] = 2; +..assert appended[3] = 3; +..assert appended[4] = 4; + +/* Verify original unchanged (immutability) */ +..assert numbers[1] = 1; +..assert numbers[2] = 2; +..assert numbers[3] = 3; + +/* Test t.append on empty table */ +empty_arr : {}; +first_item : t.append empty_arr "hello"; +..assert first_item[1] = "hello"; + +/* Test t.append with different data types */ +multi_type : {1, "two"}; +with_bool : t.append multi_type true; +..assert with_bool[1] = 1; +..assert with_bool[2] = "two"; +..assert with_bool[3] = true; + +/* ===== t.prepend TESTS ===== */ + +/* Test t.prepend on array-like table */ +original : {10, 20, 30}; +prepended : t.prepend original 5; +..assert prepended[1] = 5; +..assert prepended[2] = 10; +..assert prepended[3] = 20; +..assert prepended[4] = 30; + +/* Verify original unchanged (immutability) */ +..assert original[1] = 10; +..assert original[2] = 20; +..assert original[3] = 30; + +/* Test t.prepend on empty table */ +empty_prep : {}; +first_prep : t.prepend empty_prep "start"; +..assert first_prep[1] = "start"; + +/* Test t.prepend with object keys preserved */ +obj_with_nums : {1: "one", 2: "two", name: "test"}; +obj_prepended : t.prepend obj_with_nums "zero"; +..assert obj_prepended[1] = "zero"; +..assert obj_prepended[2] = "one"; +..assert obj_prepended[3] = "two"; +..assert obj_prepended.name = "test"; + +/* ===== COMBINED OPERATIONS TESTS ===== */ + +/* Test chaining operations */ +base : {10, 20}; +step1 : t.append base 30; +step2 : t.prepend step1 5; +final_shape : t.shape step2; + +..assert step2[1] = 5; +..assert step2[2] = 10; +..assert step2[3] = 20; +..assert step2[4] = 30; +..assert final_shape.size = 4; +..assert final_shape.type = "array"; + +/* Test with functional combinators */ +data : {1, 2, 3}; +doubled : map x -> x * 2 data; +extended : t.append doubled 8; +final_doubled : t.prepend extended 0; + +..assert final_doubled[1] = 0; +..assert final_doubled[2] = 2; +..assert final_doubled[3] = 4; +..assert final_doubled[4] = 6; +..assert final_doubled[5] = 8; + +/* ===== ERROR HANDLING TESTS ===== */ + +/* These should handle gracefully or show appropriate errors */ +/* Note: Specific error behavior depends on implementation */ + +..out "=== New Table Operations Tests Complete ==="; \ No newline at end of file |