diff --git a/src/builtins/bitwise.rs b/src/builtins/bitwise.rs index 572ea5dd..ef1efcf9 100644 --- a/src/builtins/bitwise.rs +++ b/src/builtins/bitwise.rs @@ -14,7 +14,7 @@ use anyhow::Result; pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) { m.insert("bits.and", and); - m.insert("bits.and", lsh); + m.insert("bits.lsh", lsh); m.insert("bits.negate", negate); m.insert("bits.or", or); m.insert("bits.rsh", rsh); diff --git a/tests/interpreter/cases/builtins/bitwise/and.yaml b/tests/interpreter/cases/builtins/bitwise/and.yaml new file mode 100644 index 00000000..63e8d891 --- /dev/null +++ b/tests/interpreter/cases/builtins/bitwise/and.yaml @@ -0,0 +1,60 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: bits.and.error.wrongtype1 + data: {} + modules: + - | + package test + + x = bits.and(1, "str") + query: data.test + error: "`bits.and` expects numeric argument. Got `\"str\"` instead" + + - note: bits.and.error.wrongtype2 + data: {} + modules: + - | + package test + + x = bits.and("str", 1) + query: data.test + error: "`bits.and` expects numeric argument. Got `\"str\"` instead" + + - note: bits.and.error.morearg + data: {} + modules: + - | + package test + + x = bits.and(1, 1, 1) + query: data.test + error: "`bits.and` expects 2 arguments" + + - note: bits.and.error.lessarg + data: {} + modules: + - | + package test + + x = bits.and(1) + query: data.test + error: "`bits.and` expects 2 arguments" + + - note: bits.and + data: {} + modules: + - | + package test + + x1 = bits.and(1, 0) + x2 = bits.and(1, 1) + x3 = bits.and(0, 0) + x4 = bits.and(0, 1) + query: data.test + want_result: + x1 : 0 + x2 : 1 + x3 : 0 + x4 : 0 diff --git a/tests/interpreter/cases/builtins/bitwise/lsh.yaml b/tests/interpreter/cases/builtins/bitwise/lsh.yaml new file mode 100644 index 00000000..a6e98f95 --- /dev/null +++ b/tests/interpreter/cases/builtins/bitwise/lsh.yaml @@ -0,0 +1,54 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: bits.lsh.error.wrongtype1 + data: {} + modules: + - | + package test + + x = bits.lsh(1, "str") + query: data.test + error: "`bits.lsh` expects numeric argument. Got `\"str\"` instead" + + - note: bits.lsh.error.wrongtype2 + data: {} + modules: + - | + package test + + x = bits.lsh("str", 1) + query: data.test + error: "`bits.lsh` expects numeric argument. Got `\"str\"` instead" + + - note: bits.lsh.error.morearg + data: {} + modules: + - | + package test + + x = bits.lsh(1, 1, 1) + query: data.test + error: "`bits.lsh` expects 2 arguments" + + - note: bits.lsh.error.lessarg + data: {} + modules: + - | + package test + + x = bits.lsh(1) + query: data.test + error: "`bits.lsh` expects 2 arguments" + + - note: bits.lsh + data: {} + modules: + - | + package test + + x = bits.lsh(9, 2) + query: data.test + want_result: + x : 36 diff --git a/tests/interpreter/cases/builtins/bitwise/negate.yaml b/tests/interpreter/cases/builtins/bitwise/negate.yaml new file mode 100644 index 00000000..7674b2c3 --- /dev/null +++ b/tests/interpreter/cases/builtins/bitwise/negate.yaml @@ -0,0 +1,40 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: bits.negate.error.wrongtype + data: {} + modules: + - | + package test + + x = bits.negate("str") + query: data.test + error: "`bits.negate` expects numeric argument. Got `\"str\"` instead" + + - note: bits.negate.error.morearg + data: {} + modules: + - | + package test + + x = bits.negate(1, 1) + query: data.test + error: "`bits.negate` expects 1 argument" + + - note: bits.negate + data: {} + modules: + - | + package test + + x1 = bits.negate(1) + x2 = bits.negate(0) + x3 = bits.negate(9) + x4 = bits.negate(-50) + query: data.test + want_result: + x1 : -2 + x2 : -1 + x3 : -10 + x4 : 49 diff --git a/tests/interpreter/cases/builtins/bitwise/or.yaml b/tests/interpreter/cases/builtins/bitwise/or.yaml new file mode 100644 index 00000000..9d7f3cca --- /dev/null +++ b/tests/interpreter/cases/builtins/bitwise/or.yaml @@ -0,0 +1,60 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: bits.or.error.wrongtype1 + data: {} + modules: + - | + package test + + x = bits.or(1, "str") + query: data.test + error: "`bits.or` expects numeric argument. Got `\"str\"` instead" + + - note: bits.or.error.wrongtype2 + data: {} + modules: + - | + package test + + x = bits.or("str", 1) + query: data.test + error: "`bits.or` expects numeric argument. Got `\"str\"` instead" + + - note: bits.or.error.morearg + data: {} + modules: + - | + package test + + x = bits.or(1, 1, 1) + query: data.test + error: "`bits.or` expects 2 arguments" + + - note: bits.or.error.lessarg + data: {} + modules: + - | + package test + + x = bits.or(1) + query: data.test + error: "`bits.or` expects 2 arguments" + + - note: bits.or + data: {} + modules: + - | + package test + + x1 = bits.or(1, 0) + x2 = bits.or(1, 1) + x3 = bits.or(0, 0) + x4 = bits.or(0, 1) + query: data.test + want_result: + x1 : 1 + x2 : 1 + x3 : 0 + x4 : 1 diff --git a/tests/interpreter/cases/builtins/bitwise/rsh.yaml b/tests/interpreter/cases/builtins/bitwise/rsh.yaml new file mode 100644 index 00000000..e2ada847 --- /dev/null +++ b/tests/interpreter/cases/builtins/bitwise/rsh.yaml @@ -0,0 +1,54 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: bits.rsh.error.wrongtype1 + data: {} + modules: + - | + package test + + x = bits.rsh(1, "str") + query: data.test + error: "`bits.rsh` expects numeric argument. Got `\"str\"` instead" + + - note: bits.rsh.error.wrongtype2 + data: {} + modules: + - | + package test + + x = bits.rsh("str", 1) + query: data.test + error: "`bits.rsh` expects numeric argument. Got `\"str\"` instead" + + - note: bits.rsh.error.morearg + data: {} + modules: + - | + package test + + x = bits.rsh(1, 1, 1) + query: data.test + error: "`bits.rsh` expects 2 arguments" + + - note: bits.rsh.error.lessarg + data: {} + modules: + - | + package test + + x = bits.rsh(1) + query: data.test + error: "`bits.rsh` expects 2 arguments" + + - note: bits.rsh + data: {} + modules: + - | + package test + + x = bits.rsh(9, 2) + query: data.test + want_result: + x : 2 diff --git a/tests/interpreter/cases/builtins/bitwise/xor.yaml b/tests/interpreter/cases/builtins/bitwise/xor.yaml new file mode 100644 index 00000000..b1e51d30 --- /dev/null +++ b/tests/interpreter/cases/builtins/bitwise/xor.yaml @@ -0,0 +1,60 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +cases: + - note: bits.xor.error.wrongtype1 + data: {} + modules: + - | + package test + + x = bits.xor(1, "str") + query: data.test + error: "`bits.xor` expects numeric argument. Got `\"str\"` instead" + + - note: bits.xor.error.wrongtype2 + data: {} + modules: + - | + package test + + x = bits.xor("str", 1) + query: data.test + error: "`bits.xor` expects numeric argument. Got `\"str\"` instead" + + - note: bits.xor.error.morearg + data: {} + modules: + - | + package test + + x = bits.xor(1, 1, 1) + query: data.test + error: "`bits.xor` expects 2 arguments" + + - note: bits.xor.error.lessarg + data: {} + modules: + - | + package test + + x = bits.xor(1) + query: data.test + error: "`bits.xor` expects 2 arguments" + + - note: bits.xor + data: {} + modules: + - | + package test + + x1 = bits.xor(1, 0) + x2 = bits.xor(1, 1) + x3 = bits.xor(0, 0) + x4 = bits.xor(0, 1) + query: data.test + want_result: + x1 : 1 + x2 : 0 + x3 : 0 + x4 : 1