summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBas van Beek <b.f.van.beek@vu.nl>2020-10-01 01:26:11 +0200
committerBas van Beek <b.f.van.beek@vu.nl>2020-10-05 16:08:53 +0200
commitcb92195c59be15415ce795367aeac6619f069257 (patch)
treedfaeec57b991a2cfbd5babfc0eeeda5b19fe73f4
parent5dbcbb79478a8eddf05a72f7030bdf29a93ff46c (diff)
downloadnumpy-cb92195c59be15415ce795367aeac6619f069257.tar.gz
TST: Added tests for bitwise operations
-rw-r--r--numpy/typing/tests/data/fail/bitwise_ops.py19
-rw-r--r--numpy/typing/tests/data/pass/bitwise_ops.py131
-rw-r--r--numpy/typing/tests/data/reveal/bitwise_ops.py131
3 files changed, 281 insertions, 0 deletions
diff --git a/numpy/typing/tests/data/fail/bitwise_ops.py b/numpy/typing/tests/data/fail/bitwise_ops.py
new file mode 100644
index 000000000..9be6869ad
--- /dev/null
+++ b/numpy/typing/tests/data/fail/bitwise_ops.py
@@ -0,0 +1,19 @@
+import numpy as np
+
+i8 = np.int64()
+i4 = np.int32()
+u8 = np.uint64()
+b_ = np.bool_()
+i = int()
+
+f8 = np.float64()
+
+b_ >> f8 # E: No overload variant
+i8 << f8 # E: incompatible type
+i | f8 # E: Unsupported operand types
+i8 ^ f8 # E: incompatible type
+u8 & f8 # E: No overload variant
+~f8 # E: Unsupported operand type
+
+# mypys' error message for `NoReturn` is unfortunately pretty nad
+a = u8 | 0 # E: Need type annotation
diff --git a/numpy/typing/tests/data/pass/bitwise_ops.py b/numpy/typing/tests/data/pass/bitwise_ops.py
new file mode 100644
index 000000000..67449e2c2
--- /dev/null
+++ b/numpy/typing/tests/data/pass/bitwise_ops.py
@@ -0,0 +1,131 @@
+import numpy as np
+
+i8 = np.int64(1)
+u8 = np.uint64(1)
+
+i4 = np.int32(1)
+u4 = np.uint32(1)
+
+b_ = np.bool_(1)
+
+b = bool(1)
+i = int(1)
+
+AR = np.array([0, 1, 2], dtype=np.int32)
+AR.setflags(write=False)
+
+
+i8 << i8
+i8 >> i8
+i8 | i8
+i8 ^ i8
+i8 & i8
+
+i8 << AR
+i8 >> AR
+i8 | AR
+i8 ^ AR
+i8 & AR
+
+i4 << i4
+i4 >> i4
+i4 | i4
+i4 ^ i4
+i4 & i4
+
+i8 << i4
+i8 >> i4
+i8 | i4
+i8 ^ i4
+i8 & i4
+
+i8 << i
+i8 >> i
+i8 | i
+i8 ^ i
+i8 & i
+
+i8 << b_
+i8 >> b_
+i8 | b_
+i8 ^ b_
+i8 & b_
+
+i8 << b
+i8 >> b
+i8 | b
+i8 ^ b
+i8 & b
+
+u8 << u8
+u8 >> u8
+u8 | u8
+u8 ^ u8
+u8 & u8
+
+u8 << AR
+u8 >> AR
+u8 | AR
+u8 ^ AR
+u8 & AR
+
+u4 << u4
+u4 >> u4
+u4 | u4
+u4 ^ u4
+u4 & u4
+
+u4 << i4
+u4 >> i4
+u4 | i4
+u4 ^ i4
+u4 & i4
+
+u4 << i
+u4 >> i
+u4 | i
+u4 ^ i
+u4 & i
+
+u8 << b_
+u8 >> b_
+u8 | b_
+u8 ^ b_
+u8 & b_
+
+u8 << b
+u8 >> b
+u8 | b
+u8 ^ b
+u8 & b
+
+b_ << b_
+b_ >> b_
+b_ | b_
+b_ ^ b_
+b_ & b_
+
+b_ << AR
+b_ >> AR
+b_ | AR
+b_ ^ AR
+b_ & AR
+
+b_ << b
+b_ >> b
+b_ | b
+b_ ^ b
+b_ & b
+
+b_ << i
+b_ >> i
+b_ | i
+b_ ^ i
+b_ & i
+
+~i8
+~i4
+~u8
+~u4
+~b_
+~AR
diff --git a/numpy/typing/tests/data/reveal/bitwise_ops.py b/numpy/typing/tests/data/reveal/bitwise_ops.py
new file mode 100644
index 000000000..ae899f47b
--- /dev/null
+++ b/numpy/typing/tests/data/reveal/bitwise_ops.py
@@ -0,0 +1,131 @@
+import numpy as np
+
+i8 = np.int64(1)
+u8 = np.uint64(1)
+
+i4 = np.int32(1)
+u4 = np.uint32(1)
+
+b_ = np.bool_(1)
+
+b = bool(1)
+i = int(1)
+
+AR = np.array([0, 1, 2], dtype=np.int32)
+AR.setflags(write=False)
+
+
+reveal_type(i8 << i8) # E: numpy.signedinteger
+reveal_type(i8 >> i8) # E: numpy.signedinteger
+reveal_type(i8 | i8) # E: numpy.signedinteger
+reveal_type(i8 ^ i8) # E: numpy.signedinteger
+reveal_type(i8 & i8) # E: numpy.signedinteger
+
+reveal_type(i8 << AR) # E: Union[numpy.ndarray, numpy.integer]
+reveal_type(i8 >> AR) # E: Union[numpy.ndarray, numpy.integer]
+reveal_type(i8 | AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_]
+reveal_type(i8 ^ AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_]
+reveal_type(i8 & AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_]
+
+reveal_type(i4 << i4) # E: numpy.signedinteger
+reveal_type(i4 >> i4) # E: numpy.signedinteger
+reveal_type(i4 | i4) # E: numpy.signedinteger
+reveal_type(i4 ^ i4) # E: numpy.signedinteger
+reveal_type(i4 & i4) # E: numpy.signedinteger
+
+reveal_type(i8 << i4) # E: numpy.signedinteger
+reveal_type(i8 >> i4) # E: numpy.signedinteger
+reveal_type(i8 | i4) # E: numpy.signedinteger
+reveal_type(i8 ^ i4) # E: numpy.signedinteger
+reveal_type(i8 & i4) # E: numpy.signedinteger
+
+reveal_type(i8 << i) # E: numpy.signedinteger
+reveal_type(i8 >> i) # E: numpy.signedinteger
+reveal_type(i8 | i) # E: numpy.signedinteger
+reveal_type(i8 ^ i) # E: numpy.signedinteger
+reveal_type(i8 & i) # E: numpy.signedinteger
+
+reveal_type(i8 << b_) # E: numpy.int64
+reveal_type(i8 >> b_) # E: numpy.int64
+reveal_type(i8 | b_) # E: numpy.int64
+reveal_type(i8 ^ b_) # E: numpy.int64
+reveal_type(i8 & b_) # E: numpy.int64
+
+reveal_type(i8 << b) # E: numpy.signedinteger
+reveal_type(i8 >> b) # E: numpy.signedinteger
+reveal_type(i8 | b) # E: numpy.signedinteger
+reveal_type(i8 ^ b) # E: numpy.signedinteger
+reveal_type(i8 & b) # E: numpy.signedinteger
+
+reveal_type(u8 << u8) # E: numpy.unsignedinteger
+reveal_type(u8 >> u8) # E: numpy.unsignedinteger
+reveal_type(u8 | u8) # E: numpy.unsignedinteger
+reveal_type(u8 ^ u8) # E: numpy.unsignedinteger
+reveal_type(u8 & u8) # E: numpy.unsignedinteger
+
+reveal_type(u8 << AR) # E: Union[numpy.ndarray, numpy.integer]
+reveal_type(u8 >> AR) # E: Union[numpy.ndarray, numpy.integer]
+reveal_type(u8 | AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_]
+reveal_type(u8 ^ AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_]
+reveal_type(u8 & AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_]
+
+reveal_type(u4 << u4) # E: numpy.unsignedinteger
+reveal_type(u4 >> u4) # E: numpy.unsignedinteger
+reveal_type(u4 | u4) # E: numpy.unsignedinteger
+reveal_type(u4 ^ u4) # E: numpy.unsignedinteger
+reveal_type(u4 & u4) # E: numpy.unsignedinteger
+
+reveal_type(u4 << i4) # E: numpy.signedinteger
+reveal_type(u4 >> i4) # E: numpy.signedinteger
+reveal_type(u4 | i4) # E: numpy.signedinteger
+reveal_type(u4 ^ i4) # E: numpy.signedinteger
+reveal_type(u4 & i4) # E: numpy.signedinteger
+
+reveal_type(u4 << i) # E: numpy.signedinteger
+reveal_type(u4 >> i) # E: numpy.signedinteger
+reveal_type(u4 | i) # E: numpy.signedinteger
+reveal_type(u4 ^ i) # E: numpy.signedinteger
+reveal_type(u4 & i) # E: numpy.signedinteger
+
+reveal_type(u8 << b_) # E: numpy.uint64
+reveal_type(u8 >> b_) # E: numpy.uint64
+reveal_type(u8 | b_) # E: numpy.uint64
+reveal_type(u8 ^ b_) # E: numpy.uint64
+reveal_type(u8 & b_) # E: numpy.uint64
+
+reveal_type(u8 << b) # E: numpy.unsignedinteger
+reveal_type(u8 >> b) # E: numpy.unsignedinteger
+reveal_type(u8 | b) # E: numpy.unsignedinteger
+reveal_type(u8 ^ b) # E: numpy.unsignedinteger
+reveal_type(u8 & b) # E: numpy.unsignedinteger
+
+reveal_type(b_ << b_) # E: numpy.int8
+reveal_type(b_ >> b_) # E: numpy.int8
+reveal_type(b_ | b_) # E: numpy.bool_
+reveal_type(b_ ^ b_) # E: numpy.bool_
+reveal_type(b_ & b_) # E: numpy.bool_
+
+reveal_type(b_ << AR) # E: Union[numpy.ndarray, numpy.integer]
+reveal_type(b_ >> AR) # E: Union[numpy.ndarray, numpy.integer]
+reveal_type(b_ | AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_]
+reveal_type(b_ ^ AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_]
+reveal_type(b_ & AR) # E: Union[numpy.ndarray, numpy.integer, numpy.bool_]
+
+reveal_type(b_ << b) # E: numpy.int8
+reveal_type(b_ >> b) # E: numpy.int8
+reveal_type(b_ | b) # E: numpy.bool_
+reveal_type(b_ ^ b) # E: numpy.bool_
+reveal_type(b_ & b) # E: numpy.bool_
+
+reveal_type(b_ << i) # E: Union[numpy.int32, numpy.int64]
+reveal_type(b_ >> i) # E: Union[numpy.int32, numpy.int64]
+reveal_type(b_ | i) # E: Union[numpy.int32, numpy.int64]
+reveal_type(b_ ^ i) # E: Union[numpy.int32, numpy.int64]
+reveal_type(b_ & i) # E: Union[numpy.int32, numpy.int64]
+
+reveal_type(~i8) # E: numpy.int64
+reveal_type(~i4) # E: numpy.int32
+reveal_type(~u8) # E: numpy.uint64
+reveal_type(~u4) # E: numpy.uint32
+reveal_type(~b_) # E: numpy.bool_
+reveal_type(~AR) # E: Union[numpy.ndarray*, numpy.integer, numpy.bool_]