diff --git a/tests/interpreter/cases/builtins/comparison.yaml b/tests/interpreter/cases/builtins/comparison/tests.yaml similarity index 100% rename from tests/interpreter/cases/builtins/comparison.yaml rename to tests/interpreter/cases/builtins/comparison/tests.yaml diff --git a/tests/interpreter/cases/builtins/numbers.yaml b/tests/interpreter/cases/builtins/numbers.yaml deleted file mode 100644 index b56f5f2..0000000 --- a/tests/interpreter/cases/builtins/numbers.yaml +++ /dev/null @@ -1,419 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -cases: - - note: abs - data: {} - modules: - - | - package test - x = [abs(-9), abs(9), abs(-9.1), abs(9.1)] - - # Undefined - y { false } - z = abs(y) - query: data.test - want_result: - x: [9, 9, 9.1, 9.1] - - - note: abs-extra-args - data: {} - modules: - - | - package test - x = abs(-9, 10) - query: data.test.x - error: "`abs` expects 1 argument" - - - note: abs-invalid-type - data: {} - modules: - - | - package test - x = abs("-9") - query: data.test.x - error: "`abs` expects numeric argument" - - - note: ceil - data: {} - modules: - - | - package test - x = [ceil(9.1), ceil(-9.1), ceil(9), ceil(-9)] - # Undefined - y { false } - z = ceil(y) - query: data.test - want_result: - x: [10, -9, 9, -9] - - - note: ceil-extra-args - data: {} - modules: - - | - package test - x = ceil(-9, 10) - query: data.test.x - error: "`ceil` expects 1 argument" - - - note: ceil-invalid-type - data: {} - modules: - - | - package test - x = ceil("-9") - query: data.test.x - error: "`ceil` expects numeric argument" - - - note: floor - data: {} - modules: - - | - package test - x = [floor(9.1), floor(-9.1), floor(9), floor(-9)] - # Undefined - y { false } - z = floor(y) - query: data.test - want_result: - x: [9, -10, 9, -9] - - - note: floor-extra-args - data: {} - modules: - - | - package test - x = floor(-9, 10) - query: data.test.x - error: "`floor` expects 1 argument" - - - note: floor-invalid-type - data: {} - modules: - - | - package test - x = floor("-9") - query: data.test.x - error: "`floor` expects numeric argument" - - - note: numbers.range - data: {} - modules: - - | - package test - r1 = numbers.range(1, 5) - r2 = numbers.range(5, 1) - r3 = numbers.range(-1, -5) - r4 = numbers.range(-5, -1) - - # Single item range - r5 = numbers.range(8, 8) - - # Non-integer start and end result in Undefined. - r6 = numbers.range(1.01, 5) - r7 = numbers.range(1, 5.01) - - y { false } - r8 = numbers.range(y, 10) - r9 = numbers.range(10, y) - - query: data.test - want_result: - r1: [1, 2, 3, 4, 5] - r2: [5, 4, 3, 2, 1] - r3: [-1, -2, -3, -4, -5] - r4: [-5, -4, -3, -2, -1] - r5: [8] - - - note: numbers.range-less-args - data: {} - modules: - - | - package test - x = numbers.range(1) - query: data.test.x - error: "`numbers.range` expects 2 arguments" - - - note: numbers.range-more-args - data: {} - modules: - - | - package test - x = numbers.range(1, 2, 3) - query: data.test.x - error: "`numbers.range` expects 2 arguments" - - - note: numbers.range-invalid-start - data: {} - modules: - - | - package test - x = numbers.range("1", 2) - query: data.test.x - error: "`numbers.range` expects numeric argument" - - - note: numbers.range-invalid-end - data: {} - modules: - - | - package test - x = numbers.range(1, "2") - query: data.test.x - error: "`numbers.range` expects numeric argument" - - - note: round - data: {} - modules: - - | - package test - x = [round(-9.4), round(-9.5), round(-9.6), - round(9.4), round(9.5), round(9.6), - round(8), round(-8)] - - # Undefined - y { false } - z = round(y) - query: data.test.x - want_result: [-9, -10, -10, 9, 10, 10, 8, -8] - - - note: round-extra-args - data: {} - modules: - - | - package test - x = round(-9, 10) - query: data.test.x - error: "`round` expects 1 argument" - - - note: round-invalid-type - data: {} - modules: - - | - package test - x = round("-9") - query: data.test.x - error: "`round` expects numeric argument" - - - note: rand.intn - data: {} - modules: - - | - package test - x = rand.intn("x", 50000) - y = rand.intn("y", 50000) - z = [p | - p := rand.intn("x", 50000) - ] - a = rand.intn("x", 25000) - - results = [ - x == z[0], - x != y, - x != a, - rand.intn("b", 0) - ] - query: data.test.results - want_result: [true, true, true, 0] - - - note: rand.intn-undefined - data: {} - modules: - - | - package test - y { false } - r1 = rand.intn(y, 10) - r2 = rand.intn(10, y) - r3 = rand.intn("a", 10.3) - query: data.test - want_result: {} - - - note: rand.intn-extra-args - data: {} - modules: - - | - package test - x = rand.intn("abc", 10, 11) - query: data.test.x - error: "`rand.intn` expects 2 arguments" - - - note: rand.intn-less-args - data: {} - modules: - - | - package test - x = rand.intn("abc") - query: data.test.x - error: "`rand.intn` expects 2 arguments" - - - note: rand.intn-invalid-type-1 - data: {} - modules: - - | - package test - x = rand.intn(1, 2) - query: data.test.x - error: "`rand.intn` expects string argument" - - - note: rand.intn-invalid-type-2 - data: {} - modules: - - | - package test - x = rand.intn("a", "b") - query: data.test.x - error: "`rand.intn` expects numeric argument" - - - - note: div - data: {} - modules: - - | - package test - import future.keywords.if - - x = 1/3 - - # Undefined - y if false - a = 1 / 0 - b = y / 1 - c = 1 / y - d = 13.3 % 3 - e = 13 % 3.1 - query: data.test - want_result: - x: 0.3333333333333333 - - - note: div-non-numeric - data: {} - modules: - - | - package test - x = "1" / 9 - query: data.test.x - error: "`div` expects numeric argument." - - - note: mod - data: {} - modules: - - | - package test - x = 10%3 - - # Undefined - y { false } - a = 1 % 0 - b = y % 1 - c = 1 % y - query: data.test - want_result: - x : 1 - - - note: mod-non-numeric - data: {} - modules: - - | - package test - x = "1" % 9 - query: data.test.x - error: "`mod` expects numeric argument." - - - note: mod-undefined - data: {} - modules: - - | - package test - a { false } - x = a % 10 - query: data.test - want_result: {} - - - note: mod-by-zero - data: {} - modules: - - | - package test - x = 1%0 - query: data.test - want_result: {} - - - note: mul - data: {} - modules: - - | - package test - x = 3 * -1 * 4.5 - # Undefined - y { false } - a = 1 * y - b = y * 1 - query: data.test - want_result: - x: -13.5 - - - note: mul-non-numeric - data: {} - modules: - - | - package test - x = "1" * 9 - query: data.test.x - error: "`mul` expects numeric argument." - - - note: add - data: {} - modules: - - | - package test - x = 3 + -1 + 4.5 - # Undefined - y { false } - a = 1 + y - b = y + 1 - query: data.test - want_result: - x: 6.5 - - - note: add-non-numeric - data: {} - modules: - - | - package test - x = "1" + 9 - query: data.test.x - error: "`add` expects numeric argument." - - - note: sub - data: {} - modules: - - | - package test - x = 3 - -1 - 4.5 - # Undefined - y { false } - a = 1 - y - b = y - 1 - query: data.test - want_result: - x: -0.5 - - - note: sub-non-numeric - data: {} - modules: - - | - package test - x = "1" - 9 - query: data.test.x - error: "`sub` expects numeric argument." - - - note: all - data: {} - modules: - - | - package test - x = 16 / 2 % 5 / 2 - query: data.test - want_result: - x: 1.5 - - # TODO: Lockdown associativity and precedence of operators. diff --git a/tests/interpreter/cases/builtins/numbers/abs.yaml b/tests/interpreter/cases/builtins/numbers/abs.yaml new file mode 100644 index 0000000..5be7c73 --- /dev/null +++ b/tests/interpreter/cases/builtins/numbers/abs.yaml @@ -0,0 +1,35 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: abs + data: {} + modules: + - | + package test + x = [abs(-9), abs(9), abs(-9.1), abs(9.1)] + + # Undefined + y { false } + z = abs(y) + query: data.test + want_result: + x: [9, 9, 9.1, 9.1] + + - note: extra-args + data: {} + modules: + - | + package test + x = abs(-9, 10) + query: data.test.x + error: "`abs` expects 1 argument" + + - note: invalid-type + data: {} + modules: + - | + package test + x = abs("-9") + query: data.test.x + error: "`abs` expects numeric argument" diff --git a/tests/interpreter/cases/builtins/numbers/add.yaml b/tests/interpreter/cases/builtins/numbers/add.yaml new file mode 100644 index 0000000..7ae3e17 --- /dev/null +++ b/tests/interpreter/cases/builtins/numbers/add.yaml @@ -0,0 +1,26 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: add + data: {} + modules: + - | + package test + x = 3 + -1 + 4.5 + # Undefined + y { false } + a = 1 + y + b = y + 1 + query: data.test + want_result: + x: 6.5 + + - note: non-numeric + data: {} + modules: + - | + package test + x = "1" + 9 + query: data.test.x + error: "`add` expects numeric argument." diff --git a/tests/interpreter/cases/builtins/numbers/associativity.yaml b/tests/interpreter/cases/builtins/numbers/associativity.yaml new file mode 100644 index 0000000..add4cc2 --- /dev/null +++ b/tests/interpreter/cases/builtins/numbers/associativity.yaml @@ -0,0 +1,5 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +# TODO: Lockdown associativity and precedence of operators. +cases: [] diff --git a/tests/interpreter/cases/builtins/numbers/ceil.yaml b/tests/interpreter/cases/builtins/numbers/ceil.yaml new file mode 100644 index 0000000..4c28176 --- /dev/null +++ b/tests/interpreter/cases/builtins/numbers/ceil.yaml @@ -0,0 +1,34 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: ceil + data: {} + modules: + - | + package test + x = [ceil(9.1), ceil(-9.1), ceil(9), ceil(-9)] + # Undefined + y { false } + z = ceil(y) + query: data.test + want_result: + x: [10, -9, 9, -9] + + - note: extra-args + data: {} + modules: + - | + package test + x = ceil(-9, 10) + query: data.test.x + error: "`ceil` expects 1 argument" + + - note: invalid-type + data: {} + modules: + - | + package test + x = ceil("-9") + query: data.test.x + error: "`ceil` expects numeric argument" diff --git a/tests/interpreter/cases/builtins/numbers/div.yaml b/tests/interpreter/cases/builtins/numbers/div.yaml new file mode 100644 index 0000000..1d74ead --- /dev/null +++ b/tests/interpreter/cases/builtins/numbers/div.yaml @@ -0,0 +1,32 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: div + data: {} + modules: + - | + package test + import future.keywords.if + + x = 1/3 + + # Undefined + y if false + a = 1 / 0 + b = y / 1 + c = 1 / y + d = 13.3 % 3 + e = 13 % 3.1 + query: data.test + want_result: + x: 0.3333333333333333 + + - note: non-numeric + data: {} + modules: + - | + package test + x = "1" / 9 + query: data.test.x + error: "`div` expects numeric argument." diff --git a/tests/interpreter/cases/builtins/numbers/floor.yaml b/tests/interpreter/cases/builtins/numbers/floor.yaml new file mode 100644 index 0000000..1691c4a --- /dev/null +++ b/tests/interpreter/cases/builtins/numbers/floor.yaml @@ -0,0 +1,35 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: floor + data: {} + modules: + - | + package test + x = [floor(9.1), floor(-9.1), floor(9), floor(-9)] + # Undefined + y { false } + z = floor(y) + query: data.test + want_result: + x: [9, -10, 9, -9] + + - note: extra-args + data: {} + modules: + - | + package test + x = floor(-9, 10) + query: data.test.x + error: "`floor` expects 1 argument" + + - note: invalid-type + data: {} + modules: + - | + package test + x = floor("-9") + query: data.test.x + error: "`floor` expects numeric argument" + diff --git a/tests/interpreter/cases/builtins/numbers/intn.yaml b/tests/interpreter/cases/builtins/numbers/intn.yaml new file mode 100644 index 0000000..4d6ada8 --- /dev/null +++ b/tests/interpreter/cases/builtins/numbers/intn.yaml @@ -0,0 +1,72 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: rand.intn + data: {} + modules: + - | + package test + x = rand.intn("x", 50000) + y = rand.intn("y", 50000) + z = [p | + p := rand.intn("x", 50000) + ] + a = rand.intn("x", 25000) + + results = [ + x == z[0], + x != y, + x != a, + rand.intn("b", 0) + ] + query: data.test.results + want_result: [true, true, true, 0] + + - note: undefined + data: {} + modules: + - | + package test + y { false } + r1 = rand.intn(y, 10) + r2 = rand.intn(10, y) + r3 = rand.intn("a", 10.3) + query: data.test + want_result: {} + + - note: extra-args + data: {} + modules: + - | + package test + x = rand.intn("abc", 10, 11) + query: data.test.x + error: "`rand.intn` expects 2 arguments" + + - note: less-args + data: {} + modules: + - | + package test + x = rand.intn("abc") + query: data.test.x + error: "`rand.intn` expects 2 arguments" + + - note: invalid-type-1 + data: {} + modules: + - | + package test + x = rand.intn(1, 2) + query: data.test.x + error: "`rand.intn` expects string argument" + + - note: invalid-type-2 + data: {} + modules: + - | + package test + x = rand.intn("a", "b") + query: data.test.x + error: "`rand.intn` expects numeric argument" diff --git a/tests/interpreter/cases/builtins/numbers/mod.yaml b/tests/interpreter/cases/builtins/numbers/mod.yaml new file mode 100644 index 0000000..a888296 --- /dev/null +++ b/tests/interpreter/cases/builtins/numbers/mod.yaml @@ -0,0 +1,47 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: mod + data: {} + modules: + - | + package test + x = 10%3 + + # Undefined + y { false } + a = 1 % 0 + b = y % 1 + c = 1 % y + query: data.test + want_result: + x : 1 + + - note: non-numeric + data: {} + modules: + - | + package test + x = "1" % 9 + query: data.test.x + error: "`mod` expects numeric argument." + + - note: undefined + data: {} + modules: + - | + package test + a { false } + x = a % 10 + query: data.test + want_result: {} + + - note: by-zero + data: {} + modules: + - | + package test + x = 1%0 + query: data.test + want_result: {} diff --git a/tests/interpreter/cases/builtins/numbers/mul.yaml b/tests/interpreter/cases/builtins/numbers/mul.yaml new file mode 100644 index 0000000..ba7764f --- /dev/null +++ b/tests/interpreter/cases/builtins/numbers/mul.yaml @@ -0,0 +1,26 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: mul + data: {} + modules: + - | + package test + x = 3 * -1 * 4.5 + # Undefined + y { false } + a = 1 * y + b = y * 1 + query: data.test + want_result: + x: -13.5 + + - note: non-numeric + data: {} + modules: + - | + package test + x = "1" * 9 + query: data.test.x + error: "`mul` expects numeric argument." diff --git a/tests/interpreter/cases/builtins/numbers/range.yaml b/tests/interpreter/cases/builtins/numbers/range.yaml new file mode 100644 index 0000000..4f728bf --- /dev/null +++ b/tests/interpreter/cases/builtins/numbers/range.yaml @@ -0,0 +1,68 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: numbers.range + data: {} + modules: + - | + package test + r1 = numbers.range(1, 5) + r2 = numbers.range(5, 1) + r3 = numbers.range(-1, -5) + r4 = numbers.range(-5, -1) + + # Single item range + r5 = numbers.range(8, 8) + + # Non-integer start and end result in Undefined. + r6 = numbers.range(1.01, 5) + r7 = numbers.range(1, 5.01) + + y { false } + r8 = numbers.range(y, 10) + r9 = numbers.range(10, y) + + query: data.test + want_result: + r1: [1, 2, 3, 4, 5] + r2: [5, 4, 3, 2, 1] + r3: [-1, -2, -3, -4, -5] + r4: [-5, -4, -3, -2, -1] + r5: [8] + + - note: less-args + data: {} + modules: + - | + package test + x = numbers.range(1) + query: data.test.x + error: "`numbers.range` expects 2 arguments" + + - note: more-args + data: {} + modules: + - | + package test + x = numbers.range(1, 2, 3) + query: data.test.x + error: "`numbers.range` expects 2 arguments" + + - note: invalid-start + data: {} + modules: + - | + package test + x = numbers.range("1", 2) + query: data.test.x + error: "`numbers.range` expects numeric argument" + + - note: invalid-end + data: {} + modules: + - | + package test + x = numbers.range(1, "2") + query: data.test.x + error: "`numbers.range` expects numeric argument" diff --git a/tests/interpreter/cases/builtins/numbers/round.yaml b/tests/interpreter/cases/builtins/numbers/round.yaml new file mode 100644 index 0000000..986eab8 --- /dev/null +++ b/tests/interpreter/cases/builtins/numbers/round.yaml @@ -0,0 +1,36 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: round + data: {} + modules: + - | + package test + x = [round(-9.4), round(-9.5), round(-9.6), + round(9.4), round(9.5), round(9.6), + round(8), round(-8)] + + # Undefined + y { false } + z = round(y) + query: data.test.x + want_result: [-9, -10, -10, 9, 10, 10, 8, -8] + + - note: extra-args + data: {} + modules: + - | + package test + x = round(-9, 10) + query: data.test.x + error: "`round` expects 1 argument" + + - note: invalid-type + data: {} + modules: + - | + package test + x = round("-9") + query: data.test.x + error: "`round` expects numeric argument" diff --git a/tests/interpreter/cases/builtins/numbers/sub.yaml b/tests/interpreter/cases/builtins/numbers/sub.yaml new file mode 100644 index 0000000..d2eac9a --- /dev/null +++ b/tests/interpreter/cases/builtins/numbers/sub.yaml @@ -0,0 +1,36 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: sub + data: {} + modules: + - | + package test + x = 3 - -1 - 4.5 + # Undefined + y { false } + a = 1 - y + b = y - 1 + query: data.test + want_result: + x: -0.5 + + - note: non-numeric + data: {} + modules: + - | + package test + x = "1" - 9 + query: data.test.x + error: "`sub` expects numeric argument." + + - note: all + data: {} + modules: + - | + package test + x = 16 / 2 % 5 / 2 + query: data.test + want_result: + x: 1.5 diff --git a/tests/interpreter/cases/builtins/types.yaml b/tests/interpreter/cases/builtins/types/tests.yaml similarity index 100% rename from tests/interpreter/cases/builtins/types.yaml rename to tests/interpreter/cases/builtins/types/tests.yaml