示例#1
0
    def test_mixed_cmp(self):
        import mamba

        def make_long(x):
            return x + 2**100 - 2**100

        l1 = [1, make_long(1), mamba.Bits(100, 1)]
        l2 = [5, make_long(5), mamba.Bits(100, 5)]
        for a in l1:
            for b in l1:
                assert a == b
            for b in l2:
                assert a != b
                assert b != a
        l1 = [1, make_long(1), mamba.Bits(10, 1)]
        l2 = [5, make_long(5), mamba.Bits(10, 5)]
        for a in l1:
            for b in l1:
                assert a == b
            for b in l2:
                assert a != b
                assert b != a
        with raises(ValueError):
            mamba.Bits(10, 1) == mamba.Bits(11, 1)
        with raises(ValueError):
            mamba.Bits(10, 1) == mamba.Bits(111, 1)
        with raises(ValueError):
            mamba.Bits(110, 1) == mamba.Bits(111, 1)
示例#2
0
 def test_ilshift_create_bits_with_next_big(self):
     import mamba, sys
     x = b = mamba.Bits(256, 42)
     n = mamba.Bits(256, 43)
     b <<= n
     assert x is not b
     assert x == b
示例#3
0
 def test_bits_new(self):
     import mamba
     with raises(ValueError):
         mamba.Bits(0, 1)
     with raises(ValueError):
         mamba.Bits(-1, 1)
     with raises(ValueError):
         mamba.Bits(4, mamba.Bits(3, 2))
示例#4
0
 def test_ilshift_mod_after_buffering_big(self):
     import mamba, sys
     b256 = mamba.Bits(256, 42)
     n = mamba.Bits(256, 43)
     b256 <<= n
     n = n + 23
     assert n == mamba.Bits(256, 66)
     b256._flip()
     assert b256 == mamba.Bits(256, 43)
示例#5
0
 def test_ilshift_mod_after_buffering(self):
     import mamba, sys
     b8 = mamba.Bits(8, 42)
     n = mamba.Bits(8, 43)
     b8 <<= n
     n = n + 23
     assert n == mamba.Bits(8, 66)
     b8._flip()
     assert b8 == mamba.Bits(8, 43)
示例#6
0
 def test_flip_on_bits_with_next_big(self):
     import mamba, sys
     x = b = mamba.Bits(256, 42)
     n = mamba.Bits(256, 43)
     b <<= n
     assert x is not b
     assert x == b
     b._flip()
     assert n == b
     assert x != b
示例#7
0
 def test_ilshift_buffer_preserve_big(self):
     import mamba, sys
     b256 = mamba.Bits(256, 42)
     n = mamba.Bits(256, 43)
     b256 <<= n
     b256._flip()
     assert b256 == mamba.Bits(256, 43)
     b256[0:1] = 0
     assert b256 == mamba.Bits(256, 42)
     b256._flip()
     assert b256 == mamba.Bits(256, 43)
示例#8
0
 def test_ilshift_buffer_preserve(self):
     import mamba, sys
     b8 = mamba.Bits(8, 42)
     n = mamba.Bits(8, 43)
     b8 <<= n
     b8._flip()
     assert b8 == mamba.Bits(8, 43)
     b8[0:1] = 0
     assert b8 == mamba.Bits(8, 42)
     b8._flip()
     assert b8 == mamba.Bits(8, 43)
示例#9
0
 def test_bits_repr(self):
     import mamba, sys
     b = mamba.Bits(8, 42)
     assert repr(b) == 'Bits8(0x2a)'
     b = mamba.Bits(32, 42)
     assert repr(b) == 'Bits32(0x0000002a)'
     b = mamba.Bits(32, 48879)
     assert repr(b) == 'Bits32(0x0000beef)'
     b = mamba.Bits(512, 13907095861846720239)
     assert repr(
         b
     ) == 'Bits512(0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0ffee00deadbeef)'
示例#10
0
 def test_bits_str(self):
     import mamba, sys
     b = mamba.Bits(8, 42)
     assert str(b) == '2a'
     b = mamba.Bits(32, 42)
     assert str(b) == '0000002a'
     b = mamba.Bits(32, 48879)
     assert str(b) == '0000beef'
     b = mamba.Bits(512, 13907095861846720239)
     assert str(
         b
     ) == '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0ffee00deadbeef'
示例#11
0
    def test_ilshift_other_class(self):
        import mamba, sys

        class B_4_8(object):
            def __init__(self, a, b):
                self.a = mamba.Bits(4, a)
                self.b = mamba.Bits(8, b)

            def to_bits(self):
                ret = mamba.Bits(12, 0)
                ret[0:4] = self.a
                ret[4:12] = self.b
                return ret

        class B_88_44(object):
            def __init__(self, a, b):
                self.a = mamba.Bits(88, a)
                self.b = mamba.Bits(44, b)

            def to_bits(self):
                ret = mamba.Bits(132, 0)
                ret[0:88] = self.a
                ret[88:132] = self.b
                return ret

        b = B_4_8(4, 2)
        a = mamba.Bits(12, 0)
        a <<= b
        assert a == 0
        a._flip()
        assert a == 36

        c = B_88_44(4, 2)
        with raises(ValueError):
            a <<= c

        a = mamba.Bits(13, 0)
        with raises(ValueError):
            a <<= b

        a = mamba.Bits(11, 0)
        with raises(ValueError):
            a <<= b

        d = mamba.Bits(132, 0)
        d <<= c
        assert d == 0
        d._flip()
        assert d == 0x20000000000000000000004
示例#12
0
 def test_ilshift_on_bits_with_next(self):
     import mamba, sys
     b8 = mamba.Bits(8, 42)
     n1 = mamba.Bits(8, 43)
     b8 <<= n1
     # now b8 should have next_intval field
     b8._flip()
     assert b8 == n1
     # do the assignment again
     n2 = mamba.Bits(8, 44)
     tmp = b8
     b8 <<= n2
     assert b8 is tmp
     b8._flip()
     assert b8 == n2
示例#13
0
 def test_ilshift_on_bits_with_next_big(self):
     import mamba, sys
     b256 = mamba.Bits(256, 42)
     n1 = mamba.Bits(256, 43)
     b256 <<= n1
     # now b256 should have next_intval field
     b256._flip()
     assert b256 == n1
     # do the assignment again
     n2 = mamba.Bits(256, 44)
     tmp = b256
     b256 <<= n2
     assert b256 is tmp
     b256._flip()
     assert b256 == n2
示例#14
0
    def test_smallbits_setitem(self):
        import mamba

        def make_long(x):
            return x + 2**100 - 2**100

        b = mamba.Bits(8, 0b10110010)
        b[0] = 1
        assert b == 0b10110011
        b = mamba.Bits(8, 0b10110010)
        b[0] = make_long(1)
        assert b == 0b10110011
        b = mamba.Bits(8, 0b10110010)
        b[0] = mamba.Bits(1, 1)
        assert b == 0b10110011
        with raises(ValueError):
            b[0] = mamba.Bits(80, 1)
示例#15
0
    def test_rfloordiv(self):
        import mamba
        x = mamba.Bits(4, 3)
        y = 8
        z = y // x
        assert z.nbits == 4 and z.uint() == 2
        y = 16
        with raises(ValueError):
            z = y // x

        x = mamba.Bits(400, 3**100)
        y = 2**300
        z = y // x
        assert z.nbits == 400 and z.uint(
        ) == 3952512273801159033450488434333219932310210
        y = 2**400
        with raises(ValueError):
            z = y // x
示例#16
0
    def test_bits_rsub(self):
        import mamba

        def make_long(x):
            return x + 2**100 - 2**100

        b = mamba.Bits(10, 18)
        assert 20 - b == 2
        assert make_long(20) - b == 2
        assert make_long(1) - b == 1024 + 1 - 18
        with raises(ValueError):
            assert -1 - b == 1024 - 1 - 18  # rsub also only allow positive int

        b = mamba.Bits(100, 18)
        assert 20 - b == 2
        assert 1 - b == (2**100) + 1 - 18
        assert make_long(20) - b == 2
        assert make_long(1) - b == (2**100) + 1 - 18
示例#17
0
 def test_rmod(self):
     import mamba
     x = mamba.Bits(4, 3)
     y = 8
     z = y % x
     assert z.nbits == 4 and z.uint() == 2
     y = 16
     with raises(ValueError):
         z = y % x
示例#18
0
    def test_floordiv(self):
        import mamba
        x = mamba.Bits(4, 5)
        y = mamba.Bits(4, 4)
        assert x // y == 1
        assert x // mamba.Bits(4, 4) == 1
        assert x // 4 == 1
        y = mamba.Bits(4, 6)
        assert x // y == 0
        assert x // 6 == 0
        assert 6 // x == 1
        with raises(ValueError):
            x // -1
        with raises(ValueError):
            x // 100000000000000000000000000

        with raises(ValueError):
            a = mamba.Bits(4, 3) // mamba.Bits(3, 1)
示例#19
0
    def test_mod(self):
        import mamba
        x = mamba.Bits(4, 5)
        y = mamba.Bits(4, 4)
        assert x % y == 1
        assert x % mamba.Bits(4, 4) == 1
        assert x % 4 == 1
        y = mamba.Bits(4, 6)
        assert x % y == 5
        assert x % 6 == 5
        assert 6 % x == 1
        with raises(ValueError):
            x % -1
        with raises(ValueError):
            x % 100000000000000000000000000

        with raises(ValueError):
            a = mamba.Bits(4, 3) % mamba.Bits(3, 1)
示例#20
0
    def test_smallbits_setslice(self):
        import mamba

        def make_long(x):
            return x + 2**100 - 2**100

        b = mamba.Bits(8, 0b10110001)
        b[0:2] = 0b10
        assert b == 0b10110010

        b = mamba.Bits(8, 0b10110010)
        b[0:2] = 0b1
        assert b == 0b10110001

        b = mamba.Bits(8, 0b10110001)
        b[0:2] = make_long(0b10)
        assert b == 0b10110010

        b = mamba.Bits(8, 0b10110001)
        b[0:2] = mamba.Bits(2, 0b10)
        assert b == 0b10110010

        with raises(ValueError):
            b[0:2] = mamba.Bits(10, 0)
示例#21
0
 def to_bits(self):
     ret = mamba.Bits(132, 0)
     ret[0:88] = self.a
     ret[88:132] = self.b
     return ret
示例#22
0
 def to_bits(self):
     ret = mamba.Bits(12, 0)
     ret[0:4] = self.a
     ret[4:12] = self.b
     return ret
示例#23
0
 def __init__(self, a, b):
     self.a = mamba.Bits(88, a)
     self.b = mamba.Bits(44, b)
示例#24
0
 def test_invert(self):
     import mamba
     b = mamba.Bits(8, 17)
     assert ~b == mamba.Bits(8, ~17)
     b = mamba.Bits(80, 17)
     assert ~b == mamba.Bits(80, ~17)
示例#25
0
    def test_bigbits_getitem(self):
        import mamba
        b = mamba.Bits(80, 0b10110010)
        assert b[0] == mamba.Bits(1, 0)
        assert b[1] == mamba.Bits(1, 1)
        assert b[mamba.Bits(1, 1)] == mamba.Bits(1, 1)
        assert b[mamba.Bits(100, 1)] == mamba.Bits(1, 1)
        assert b[2] == mamba.Bits(1, 0)
        assert b[3] == mamba.Bits(1, 0)
        assert b[4] == mamba.Bits(1, 1)
        assert b[5] == mamba.Bits(1, 1)
        assert b[6] == mamba.Bits(1, 0)
        assert b[7] == mamba.Bits(1, 1)

        assert b[0:2] == mamba.Bits(2, 0b10)
        assert b[mamba.Bits(1, 0):2] == mamba.Bits(2, 0b10)
        assert b[0:mamba.Bits(3, 2)] == mamba.Bits(2, 0b10)
        assert b[mamba.Bits(100, 0):2] == mamba.Bits(2, 0b10)
        assert b[0:mamba.Bits(300, 2)] == mamba.Bits(2, 0b10)

        initval = 0b10110010 << 70 | 0b110101011
        b = mamba.Bits(80, initval)
        assert b[0:70] == mamba.Bits(70, 0b110101011)
        assert b[5:75] == mamba.Bits(70, (initval >> 5) & (2**70 - 1))

        with raises(IndexError):
            b[0:3:2]
示例#26
0
    def test_mixed_arithmetic(self):
        import mamba

        def make_long(x):
            return x + 2**100 - 2**100

        l = [mamba.Bits(100, 1), 1, make_long(1)]
        for a in l:
            for b in l:
                assert a + b == b + a == 2
                assert a & b == b & a == 1
        l = [mamba.Bits(10, 1), 1, make_long(1)]
        for a in l:
            for b in l:
                assert a + b == b + a == 2
                assert a & b == b & a == 1
        assert mamba.Bits(64, 1) + int(mamba.Bits(64, 0xffffffffffffffff)) == 0

        with raises(ValueError):
            mamba.Bits(10, 1) + mamba.Bits(11, 1)
        with raises(ValueError):
            mamba.Bits(10, 1) + mamba.Bits(111, 1)
        with raises(ValueError):
            mamba.Bits(110, 1) + mamba.Bits(111, 1)
        with raises(ValueError):
            mamba.Bits(10, 1) & mamba.Bits(11, 1)
        with raises(ValueError):
            mamba.Bits(10, 1) & mamba.Bits(111, 1)
        with raises(ValueError):
            mamba.Bits(110, 1) & mamba.Bits(111, 1)
示例#27
0
 def test_bits_getitem_bug(self):
     import mamba
     b = mamba.Bits(100, 1)[63]  # used to crash
     assert b == 0
示例#28
0
 def test_add_ovf_bug(self):
     import mamba
     b = mamba.Bits(1, 1)
     assert b + b == 0
示例#29
0
 def test_bits_bin_oct_hex(self):
     import mamba, sys
     assert mamba.Bits(15, 35).bin() == '0b000000000100011'
     assert mamba.Bits(15, 35).oct() == '0o00043'
     assert mamba.Bits(15, 35).hex() == '0x0023'
示例#30
0
 def test_flip_on_bits_big(self):
     import mamba, sys
     b = mamba.Bits(256, 42)
     raises(TypeError, b._flip)