summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/micropython/viper_binop_arith_uint.py32
-rw-r--r--tests/micropython/viper_binop_arith_uint.py.exp10
-rw-r--r--tests/micropython/viper_binop_bitwise_uint.py58
-rw-r--r--tests/micropython/viper_binop_bitwise_uint.py.exp22
-rw-r--r--tests/micropython/viper_binop_comp_uint.py31
-rw-r--r--tests/micropython/viper_binop_comp_uint.py.exp6
-rw-r--r--tests/micropython/viper_error.py3
-rw-r--r--tests/micropython/viper_error.py.exp3
8 files changed, 165 insertions, 0 deletions
diff --git a/tests/micropython/viper_binop_arith_uint.py b/tests/micropython/viper_binop_arith_uint.py
new file mode 100644
index 000000000..e4270a10a
--- /dev/null
+++ b/tests/micropython/viper_binop_arith_uint.py
@@ -0,0 +1,32 @@
+# test arithmetic operators with uint type
+
+
+@micropython.viper
+def add(x: uint, y: uint):
+ return x + y, y + x
+
+
+print("add")
+print(*add(1, 2))
+print(*(x & 0xFFFFFFFF for x in add(-1, -2)))
+
+
+@micropython.viper
+def sub(x: uint, y: uint):
+ return x - y, y - x
+
+
+print("sub")
+print(*(x & 0xFFFFFFFF for x in sub(1, 2)))
+print(*(x & 0xFFFFFFFF for x in sub(-1, -2)))
+
+
+@micropython.viper
+def mul(x: uint, y: uint):
+ return x * y, y * x
+
+
+print("mul")
+print(*mul(2, 3))
+print(*(x & 0xFFFFFFFF for x in mul(2, -3)))
+print(*mul(-2, -3))
diff --git a/tests/micropython/viper_binop_arith_uint.py.exp b/tests/micropython/viper_binop_arith_uint.py.exp
new file mode 100644
index 000000000..72f84b716
--- /dev/null
+++ b/tests/micropython/viper_binop_arith_uint.py.exp
@@ -0,0 +1,10 @@
+add
+3 3
+4294967293 4294967293
+sub
+4294967295 1
+1 4294967295
+mul
+6 6
+4294967290 4294967290
+6 6
diff --git a/tests/micropython/viper_binop_bitwise_uint.py b/tests/micropython/viper_binop_bitwise_uint.py
new file mode 100644
index 000000000..3bc7ba8d1
--- /dev/null
+++ b/tests/micropython/viper_binop_bitwise_uint.py
@@ -0,0 +1,58 @@
+# test bitwise operators on uint type
+
+
+@micropython.viper
+def shl(x: uint, y: uint) -> uint:
+ return x << y
+
+
+print("shl")
+print(shl(1, 0))
+print(shl(1, 30))
+print(shl(-1, 10) & 0xFFFFFFFF)
+
+
+@micropython.viper
+def shr(x: uint, y: uint) -> uint:
+ return x >> y
+
+
+print("shr")
+print(shr(1, 0))
+print(shr(16, 3))
+print(shr(-1, 1) in (0x7FFFFFFF, 0x7FFFFFFF_FFFFFFFF))
+
+
+@micropython.viper
+def and_(x: uint, y: uint):
+ return x & y, y & x
+
+
+print("and")
+print(*and_(1, 0))
+print(*and_(1, 3))
+print(*and_(-1, 2))
+print(*(x & 0xFFFFFFFF for x in and_(-1, -2)))
+
+
+@micropython.viper
+def or_(x: uint, y: uint):
+ return x | y, y | x
+
+
+print("or")
+print(*or_(1, 0))
+print(*or_(1, 2))
+print(*(x & 0xFFFFFFFF for x in or_(-1, 2)))
+
+
+@micropython.viper
+def xor(x: uint, y: uint):
+ return x ^ y, y ^ x
+
+
+print("xor")
+print(*xor(1, 0))
+print(*xor(1, 3))
+print(*(x & 0xFFFFFFFF for x in xor(-1, 3)))
+print(*xor(-1, -3))
diff --git a/tests/micropython/viper_binop_bitwise_uint.py.exp b/tests/micropython/viper_binop_bitwise_uint.py.exp
new file mode 100644
index 000000000..3ad6469a2
--- /dev/null
+++ b/tests/micropython/viper_binop_bitwise_uint.py.exp
@@ -0,0 +1,22 @@
+shl
+1
+1073741824
+4294966272
+shr
+1
+2
+True
+and
+0 0
+1 1
+2 2
+4294967294 4294967294
+or
+1 1
+3 3
+4294967295 4294967295
+xor
+1 1
+2 2
+4294967292 4294967292
+2 2
diff --git a/tests/micropython/viper_binop_comp_uint.py b/tests/micropython/viper_binop_comp_uint.py
new file mode 100644
index 000000000..85aa32c78
--- /dev/null
+++ b/tests/micropython/viper_binop_comp_uint.py
@@ -0,0 +1,31 @@
+# test comparison operators with uint type
+
+
+@micropython.viper
+def f(x: uint, y: uint):
+ if x < y:
+ print(" <", end="")
+ if x > y:
+ print(" >", end="")
+ if x == y:
+ print(" ==", end="")
+ if x <= y:
+ print(" <=", end="")
+ if x >= y:
+ print(" >=", end="")
+ if x != y:
+ print(" !=", end="")
+
+
+def test(a, b):
+ print(a, b, end="")
+ f(a, b)
+ print()
+
+
+test(1, 1)
+test(2, 1)
+test(1, 2)
+test(2, -1)
+test(-2, 1)
+test(-2, -1)
diff --git a/tests/micropython/viper_binop_comp_uint.py.exp b/tests/micropython/viper_binop_comp_uint.py.exp
new file mode 100644
index 000000000..cacce62b6
--- /dev/null
+++ b/tests/micropython/viper_binop_comp_uint.py.exp
@@ -0,0 +1,6 @@
+1 1 == <= >=
+2 1 > >= !=
+1 2 < <= !=
+2 -1 < <= !=
+-2 1 > >= !=
+-2 -1 < <= !=
diff --git a/tests/micropython/viper_error.py b/tests/micropython/viper_error.py
index 790f3d75c..80617af0c 100644
--- a/tests/micropython/viper_error.py
+++ b/tests/micropython/viper_error.py
@@ -52,6 +52,7 @@ test("@micropython.viper\ndef f() -> int: return []")
# can't do binary op between incompatible types
test("@micropython.viper\ndef f(): 1 + []")
+test("@micropython.viper\ndef f(x:int, y:uint): x < y")
# can't load
test("@micropython.viper\ndef f(): 1[0]")
@@ -73,6 +74,8 @@ test("@micropython.viper\ndef f(x:int): -x")
test("@micropython.viper\ndef f(x:int): ~x")
# binary op not implemented
+test("@micropython.viper\ndef f(x:uint, y:uint): res = x // y")
+test("@micropython.viper\ndef f(x:uint, y:uint): res = x % y")
test("@micropython.viper\ndef f(x:int): res = x in x")
# yield (from) not implemented
diff --git a/tests/micropython/viper_error.py.exp b/tests/micropython/viper_error.py.exp
index da9a0ca93..31c85b1d8 100644
--- a/tests/micropython/viper_error.py.exp
+++ b/tests/micropython/viper_error.py.exp
@@ -6,6 +6,7 @@ ViperTypeError("local 'x' has type 'int' but source is 'object'",)
ViperTypeError("can't implicitly convert 'ptr' to 'bool'",)
ViperTypeError("return expected 'int' but got 'object'",)
ViperTypeError("can't do binary op between 'int' and 'object'",)
+ViperTypeError('comparison of int and uint',)
ViperTypeError("can't load from 'int'",)
ViperTypeError("can't load from 'int'",)
ViperTypeError("can't store to 'int'",)
@@ -17,6 +18,8 @@ ViperTypeError('must raise an object',)
ViperTypeError('unary op __pos__ not implemented',)
ViperTypeError('unary op __neg__ not implemented',)
ViperTypeError('unary op __invert__ not implemented',)
+ViperTypeError('div/mod not implemented for uint',)
+ViperTypeError('div/mod not implemented for uint',)
ViperTypeError('binary op not implemented',)
NotImplementedError('native yield',)
NotImplementedError('native yield',)