diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2020-08-21 11:30:16 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2025-03-02 14:24:49 +0000 |
| commit | 950dd72215f375fe37d8dc5d78152ccf452d5e46 (patch) | |
| tree | a17591a435eac84f85a0b5933ca14336322a5e1e /spec | |
| parent | dirty (remove) implementation (diff) | |
| download | alive-950dd72215f375fe37d8dc5d78152ccf452d5e46.tar.gz alive-950dd72215f375fe37d8dc5d78152ccf452d5e46.zip | |
move array ops into library, implement concat and size
Diffstat (limited to 'spec')
| -rw-r--r-- | spec/lang/array_spec.moon | 72 | ||||
| -rw-r--r-- | spec/test_setup.moon | 6 |
2 files changed, 49 insertions, 29 deletions
diff --git a/spec/lang/array_spec.moon b/spec/lang/array_spec.moon index 2dd2894..fc7ce43 100644 --- a/spec/lang/array_spec.moon +++ b/spec/lang/array_spec.moon @@ -2,7 +2,7 @@ import TestPilot from require 'spec.test_setup' import T, Array, Constant from require 'alv' describe "array", -> - test = TestPilot '' + test = TestPilot '', '(import* array)\n' svec3 = Array 3, T.str @@ -16,15 +16,6 @@ describe "array", -> err = assert.has.error -> COPILOT\eval_once '(array 1 false)' assert.matches "argument error: couldn't match arguments", err - it "length can be read using (len)", -> - rt = COPILOT\eval_once '(len (array 1))' - assert.is.true rt\is_const! - assert.is.equal (Constant.num 1), rt.result - - rt = COPILOT\eval_once '(len (array 1 2 3))' - assert.is.true rt\is_const! - assert.is.equal (Constant.num 3), rt.result - describe "(set)", -> it "can swap values", -> rt = COPILOT\eval_once '(set (array "f" "b" "c") 0 "a")' @@ -33,7 +24,7 @@ describe "array", -> it "checks value type", -> err = assert.has.error -> COPILOT\eval_once '(set (array 1) 0 "a")' - assert.matches "expected value for key '0' to be num, not str", err + assert.matches "expected value of type num, not str", err it "checks index range", -> err = assert.has.error -> COPILOT\eval_once '(set (array 1 2) -1 0)' @@ -47,18 +38,13 @@ describe "array", -> assert.matches "index '2' out of range!", err describe "(get)", -> - it "can peek a value", -> - rt = COPILOT\eval_once '(get (array 1 2))' - assert.is.true rt\is_const! - assert.is.equal (Constant.num 2), rt.result - it "can get a value", -> rt = COPILOT\eval_once '(get (array 1 2) 0)' assert.is.true rt\is_const! assert.is.equal (Constant.num 1), rt.result it "checks index range", -> - err = assert.has.error -> COPILOT\eval_once '(get (array 1 2) -1 0)' + err = assert.has.error -> COPILOT\eval_once '(get (array 1 2) -1)' assert.matches "index '%-1' out of range!", err COPILOT\eval_once '(get (array 1 2) 0)' @@ -68,12 +54,42 @@ describe "array", -> err = assert.has.error -> COPILOT\eval_once '(get (array 1 2) 2)' assert.matches "index '2' out of range!", err - describe "(insert)", -> - it "can append a value", -> - rt = COPILOT\eval_once '(insert (array "a" "b") "c")' + describe '(head)', -> + it "can peek a value", -> + rt = COPILOT\eval_once '(head (array 1 2))' assert.is.true rt\is_const! - assert.is.equal svec3\mk_const({ 'a', 'b', 'c' }), rt.result + assert.is.equal (Constant.num 1), rt.result + + describe '(tail)', -> + it "gets rest of an array", -> + rt = COPILOT\eval_once '(tail (array 1))' + assert.is.true rt\is_const! + assert.is.same (Array 0, T.num), rt.result.type + assert.is.same {}, rt.result! + + rt = COPILOT\eval_once '(tail (array 1 2))' + assert.is.true rt\is_const! + assert.is.same (Array 1, T.num), rt.result.type + assert.is.same { 2 }, rt.result! + rt = COPILOT\eval_once '(tail (array 1 2 3 4))' + assert.is.true rt\is_const! + assert.is.same (Array 3, T.num), rt.result.type + assert.is.same { 2, 3, 4 }, rt.result! + + describe '(prepend)', -> + it "prepends to array", -> + rt = COPILOT\eval_once '(prepend (array 2) 1)' + assert.is.true rt\is_const! + assert.is.same (Array 2, T.num), rt.result.type + assert.is.same { 1, 2 }, rt.result! + + rt = COPILOT\eval_once '(prepend (array 2 3 4) 1)' + assert.is.true rt\is_const! + assert.is.same (Array 4, T.num), rt.result.type + assert.is.same { 1, 2, 3, 4 }, rt.result! + + describe "(insert)", -> it "can insert a value", -> rt = COPILOT\eval_once '(insert (array "b" "c") 0 "a")' assert.is.true rt\is_const! @@ -101,11 +117,6 @@ describe "array", -> assert.matches "index '3' out of range!", err describe "(remove)", -> - it "can pop a value", -> - rt = COPILOT\eval_once '(remove (array "a" "b" "c" "d"))' - assert.is.true rt\is_const! - assert.is.equal svec3\mk_const({ 'a', 'b', 'c' }), rt.result - it "can remove a value", -> rt = COPILOT\eval_once '(remove (array "d" "a" "b" "c") 0)' assert.is.true rt\is_const! @@ -126,3 +137,12 @@ describe "array", -> rt = COPILOT\eval_once '(concat (array "a" "b") (array "c"))' assert.is.true rt\is_const! assert.is.equal svec3\mk_const({ 'a', 'b', 'c' }), rt.result + + it "size can be read using (size)", -> + rt = COPILOT\eval_once '(size (array 1))' + assert.is.true rt\is_const! + assert.is.equal (Constant.num 1), rt.result + + rt = COPILOT\eval_once '(size (array 1 2 3))' + assert.is.true rt\is_const! + assert.is.equal (Constant.num 3), rt.result diff --git a/spec/test_setup.moon b/spec/test_setup.moon index 2bcd9df..92756a8 100644 --- a/spec/test_setup.moon +++ b/spec/test_setup.moon @@ -15,13 +15,13 @@ os.time = do export COPILOT class TestPilot extends Copilot - new: (code) => + new: (code, @preamble) => super! COPILOT = @ if code - @active_module = StringModule 'main', code + @active_module = StringModule 'main', @preamble .. code @last_modules.__root = @active_module @tick! else @@ -33,7 +33,7 @@ class TestPilot extends Copilot next_tick: => @T += 1 eval_once: (code) => - @active_module\spit code + @active_module\spit @preamble .. code @tick! @active_module.root |
