x = C.ByteString(T.bin("once upon a time there was a string"))
## Check that simple indexing works.
+ me.assertEqual(type(x[3]), C.ByteString)
me.assertEqual(x[3], 'e')
me.assertEqual(x[-5], 't')
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.
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("")))