mp.c: Accept arbitrary iterables as inputs to `MPCRT'.
[catacomb-python] / t / t-bytes.py
index 6755e96..27b7e49 100644 (file)
@@ -47,15 +47,23 @@ class TestByteString (U.TestCase):
 
     x = C.ByteString(T.bin("once upon a time there was a string"))
 
-    ## Check that simple indexing works.
-    me.assertEqual(x[3], 'e')
-    me.assertEqual(x[-5], 't')
+    ## Check that simple indexing works.  Alas the behaviour differs between
+    ## Python major versions.
+    if T.PY3:
+      me.assertEqual(type(x[3]), int)
+      me.assertEqual(x[3], 101)
+      me.assertEqual(x[-5], 116)
+    else:
+      me.assertEqual(type(x[3]), C.ByteString)
+      me.assertEqual(x[3], 'e')
+      me.assertEqual(x[-5], 't')
 
     ## Check out-of-range detection.
     x[34]; me.assertRaises(IndexError, lambda: x[35])
     x[-35]; me.assertRaises(IndexError, lambda: x[-36])
 
-    ## Check slicing.
+    ## Check slicing.  This should always give us bytes.
+    me.assertEqual(type(x[7:17]), C.ByteString)
     me.assertEqual(x[7:17], T.bin("on a time "))
 
     ## Complex slicing is also supported.
@@ -143,13 +151,18 @@ class TestByteString (U.TestCase):
     me.assertEqual(~x, C.bytes("fc5a03"))
 
     ## Concatenation.
+    me.assertEqual(type(x + y), C.ByteString)
     me.assertEqual(x + y, C.bytes("03a5fc5fac30"))
 
     ## Replication (asymmetric but commutative).
+    me.assertEqual(type(3*x), C.ByteString)
+    me.assertEqual(type(x*3), C.ByteString)
     me.assertEqual(3*x, C.bytes("03a5fc03a5fc03a5fc"))
     me.assertEqual(x*3, C.bytes("03a5fc03a5fc03a5fc"))
 
     ## Replication by zero (regression test).
+    me.assertEqual(type(0*x), C.ByteString)
+    me.assertEqual(type(x*0), C.ByteString)
     me.assertEqual(0*x, C.ByteString(T.bin("")))
     me.assertEqual(x*0, C.ByteString(T.bin("")))