From e08d13df538a479fcf92780866e3549ce42d0121 Mon Sep 17 00:00:00 2001 From: eric-therond Date: Thu, 22 Jun 2023 20:27:58 +0200 Subject: [PATCH] fix bitwise.and and add tests (#19) Signed-off-by: eric-therond --- src/builtins/bitwise.rs | 2 +- .../cases/builtins/bitwise/and.yaml | 60 +++++++++++++++++++ .../cases/builtins/bitwise/lsh.yaml | 54 +++++++++++++++++ .../cases/builtins/bitwise/negate.yaml | 40 +++++++++++++ .../cases/builtins/bitwise/or.yaml | 60 +++++++++++++++++++ .../cases/builtins/bitwise/rsh.yaml | 54 +++++++++++++++++ .../cases/builtins/bitwise/xor.yaml | 60 +++++++++++++++++++ 7 files changed, 329 insertions(+), 1 deletion(-) create mode 100644 tests/interpreter/cases/builtins/bitwise/and.yaml create mode 100644 tests/interpreter/cases/builtins/bitwise/lsh.yaml create mode 100644 tests/interpreter/cases/builtins/bitwise/negate.yaml create mode 100644 tests/interpreter/cases/builtins/bitwise/or.yaml create mode 100644 tests/interpreter/cases/builtins/bitwise/rsh.yaml create mode 100644 tests/interpreter/cases/builtins/bitwise/xor.yaml diff --git a/src/builtins/bitwise.rs b/src/builtins/bitwise.rs index 572ea5d..ef1efcf 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 0000000..63e8d89 --- /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 0000000..a6e98f9 --- /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 0000000..7674b2c --- /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 0000000..9d7f3cc --- /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 0000000..e2ada84 --- /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 0000000..b1e51d3 --- /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