Beispiel #1
0
def test_list_comparisons():
    buf1 = (
        '\x01\x00\x00\x00\x00\x00\x00\x00'  # 1
        '\x02\x00\x00\x00\x00\x00\x00\x00'  # 2
        '\x03\x00\x00\x00\x00\x00\x00\x00'  # 3
        '\x04\x00\x00\x00\x00\x00\x00\x00')  # 4
    buf2 = 'garbage0' + buf1
    #
    lst1 = List.from_buffer(buf1, 0, ptr.LIST_SIZE_64, 4,
                            PrimitiveItemType(Types.int64))
    lst2 = List.from_buffer(buf2, 8, ptr.LIST_SIZE_64, 4,
                            PrimitiveItemType(Types.int64))
    lst3 = List.from_buffer(buf1, 0, ptr.LIST_SIZE_64, 3,
                            PrimitiveItemType(Types.int64))
    #
    assert lst1 == lst2
    assert not lst1 != lst2
    #
    assert not lst1 == lst3  # different item_count
    assert lst1 != lst3
    #
    py.test.raises(TypeError, "lst1 <  lst2")
    py.test.raises(TypeError, "lst1 <= lst2")
    py.test.raises(TypeError, "lst1 >  lst2")
    py.test.raises(TypeError, "lst1 >= lst2")
Beispiel #2
0
def test_alloc_list_int8():
    builder = Builder(0, 1)
    builder.alloc_list(0, PrimitiveItemType(Types.int8), [1, 2, 3, 4])
    buf = builder.build()
    assert buf == (
        '\x01\x00\x00\x00\x22\x00\x00\x00'  # ptrlist
        '\x01\x02\x03\x04\x00\x00\x00\x00')  # 1,2,3,4 + padding
Beispiel #3
0
def test_ListItem_far_pointer():
    seg0 = b('\x01\x00\x00\x00\x26\x00\x00\x00'  # ptrlist
             '\x0d\x00\x00\x00\x12\x00\x00\x00'  # ptr item 1
             '\x0d\x00\x00\x00\x1a\x00\x00\x00'  # ptr item 2
             '\x0d\x00\x00\x00\x22\x00\x00\x00'  # ptr item 3
             '\x02\x00\x00\x00\x01\x00\x00\x00'  # far ptr, segment=1, offset=0
             'A'
             '\x00\x00\x00\x00\x00\x00\x00'  # A
             'B'
             'C'
             '\x00\x00\x00\x00\x00\x00'  # BC
             'D'
             'E'
             'F'
             '\x00\x00\x00\x00\x00')  # DEF
    #
    seg1 = b('\x01\x00\x00\x00\x2a\x00\x00\x00'  # ptr item 4
             'G'
             'H'
             'I'
             'J'
             '\x00\x00\x00\x00')  # GHIJ
    #
    buf = MultiSegment(seg0 + seg1, segment_offsets=(0, len(seg0)))
    blob = Struct.from_buffer(buf, 0, data_size=0, ptrs_size=1)
    item_type = ListItemType(PrimitiveItemType(Types.int8))
    lst = blob._read_list(0, item_type)
    ghij = lst[3]
    assert list(ghij) == [ord('G'), ord('H'), ord('I'), ord('J'), 0]
Beispiel #4
0
def test_Int8List():
    buf = b('\x01\x00\x00\x00\x82\x00\x00\x00'  # ptrlist
            'hello capnproto\0')  # string
    blob = Struct.from_buffer(buf, 0, data_size=0, ptrs_size=1)
    lst = blob._read_list(0, PrimitiveItemType(Types.int8))
    assert len(lst) == 16
    assert list(lst) == list(map(ord, 'hello capnproto\0'))
Beispiel #5
0
def test_null_pointers():
    NULL = '\x00\x00\x00\x00\x00\x00\x00\x00'  # NULL pointer
    builder = Builder(0, 3)
    builder.alloc_struct(0, Struct, None)
    builder.alloc_text(8, None)
    builder.alloc_list(16, PrimitiveItemType(Types.int64), None)
    buf = builder.build()
    assert buf == NULL * 3
Beispiel #6
0
 def test_null_pointers(self):
     NULL = b'\x00\x00\x00\x00\x00\x00\x00\x00' # NULL pointer
     buf = SegmentBuilder()
     pos = buf.allocate(24)
     buf.copy_from_struct(0, Struct, None)
     buf.alloc_text(8, None)
     buf.copy_from_list(16, PrimitiveItemType(Types.int64), None)
     s = buf.as_string()
     assert s == NULL*3
Beispiel #7
0
def test_compare_with_py_list():
    buf = b('\x01\x00\x00\x00\x25\x00\x00\x00'  # ptrlist
            '\x01\x00\x00\x00\x00\x00\x00\x00'  # 1
            '\x02\x00\x00\x00\x00\x00\x00\x00'  # 2
            '\x03\x00\x00\x00\x00\x00\x00\x00'  # 3
            '\x04\x00\x00\x00\x00\x00\x00\x00')  # 4
    blob = Struct.from_buffer(buf, 0, data_size=0, ptrs_size=1)
    lst = blob._read_list(0, PrimitiveItemType(Types.int64))
    assert lst == [1, 2, 3, 4]
Beispiel #8
0
def test_Float64List():
    buf = b('\x01\x00\x00\x00\x25\x00\x00\x00'  # ptrlist
            '\x58\x39\xb4\xc8\x76\xbe\xf3\x3f'  # 1.234
            '\xc3\xf5\x28\x5c\x8f\xc2\x02\x40'  # 2.345
            '\xd9\xce\xf7\x53\xe3\xa5\x0b\x40'  # 3.456
            '\xf8\x53\xe3\xa5\x9b\x44\x12\x40')  # 4.567
    blob = Struct.from_buffer(buf, 0, data_size=0, ptrs_size=1)
    lst = blob._read_list(0, PrimitiveItemType(Types.float64))
    assert list(lst) == [1.234, 2.345, 3.456, 4.567]
Beispiel #9
0
def test_alloc_list_int64():
    builder = Builder(0, 1)
    builder.alloc_list(0, PrimitiveItemType(Types.int64), [1, 2, 3, 4])
    buf = builder.build()
    assert buf == (
        '\x01\x00\x00\x00\x25\x00\x00\x00'  # ptrlist
        '\x01\x00\x00\x00\x00\x00\x00\x00'  # 1
        '\x02\x00\x00\x00\x00\x00\x00\x00'  # 2
        '\x03\x00\x00\x00\x00\x00\x00\x00'  # 3
        '\x04\x00\x00\x00\x00\x00\x00\x00')  # 4
Beispiel #10
0
 def mylist(self):
     buf = b('\x01\x00\x00\x00\x2D\x00\x00\x00'  # ptrlist
             '\x00\x00\x00\x00\x00\x00\x00\x00'  # 0
             '\x01\x00\x00\x00\x00\x00\x00\x00'  # 1
             '\x02\x00\x00\x00\x00\x00\x00\x00'  # 2
             '\x03\x00\x00\x00\x00\x00\x00\x00'  # 3
             '\x04\x00\x00\x00\x00\x00\x00\x00')  # 4
     blob = Struct.from_buffer(buf, 0, data_size=0, ptrs_size=1)
     lst = blob._read_list(0, PrimitiveItemType(Types.int64))
     return lst
Beispiel #11
0
def test_alloc_list_float64():
    builder = Builder(0, 1)
    builder.alloc_list(0, PrimitiveItemType(Types.float64),
                       [1.234, 2.345, 3.456, 4.567])
    buf = builder.build()
    assert buf == (
        '\x01\x00\x00\x00\x25\x00\x00\x00'  # ptrlist
        '\x58\x39\xb4\xc8\x76\xbe\xf3\x3f'  # 1.234
        '\xc3\xf5\x28\x5c\x8f\xc2\x02\x40'  # 2.345
        '\xd9\xce\xf7\x53\xe3\xa5\x0b\x40'  # 3.456
        '\xf8\x53\xe3\xa5\x9b\x44\x12\x40')  # 4.567
Beispiel #12
0
 def test_copy_from_list_int8(self):
     buf = SegmentBuilder()
     buf.allocate(8) # allocate some garbage at the beginning
     pos = buf.allocate(8)
     item_type = PrimitiveItemType(Types.int8)
     buf.copy_from_list(pos, item_type, [1, 2, 3, 4])
     s = buf.as_string()
     assert s == b(
         '\x00\x00\x00\x00\x00\x00\x00\x00'   # garbage
         '\x01\x00\x00\x00\x22\x00\x00\x00'   # ptrlist
         '\x01\x02\x03\x04\x00\x00\x00\x00')  # 1,2,3,4 + padding
Beispiel #13
0
def test_far_pointer_0():
    # see also test_blob.test_far_pointer_0
    seg0 = b('\x00\x00\x00\x00\x00\x00\x00\x00'   # some garbage
            '\x0a\x00\x00\x00\x01\x00\x00\x00')   # far pointer: segment=1, offset=1
    seg1 = b('\x00\x00\x00\x00\x00\x00\x00\x00'   # random data
            '\x01\x00\x00\x00\x25\x00\x00\x00'    # ptrlist
            '\x01\x00\x00\x00\x00\x00\x00\x00'    # 1
            '\x02\x00\x00\x00\x00\x00\x00\x00'    # 2
            '\x03\x00\x00\x00\x00\x00\x00\x00'    # 3
            '\x04\x00\x00\x00\x00\x00\x00\x00')   # 4
    buf = MultiSegment(seg0+seg1, segment_offsets=(0, 16))
    blob = Struct.from_buffer(buf, 8, data_size=0, ptrs_size=1)
    lst = blob._read_list(0, PrimitiveItemType(Types.int64))
    assert lst == [1, 2, 3, 4]
Beispiel #14
0
 def test_copy_from_list_float64(self):
     buf = SegmentBuilder()
     buf.allocate(8) # allocate some garbage at the beginning
     pos = buf.allocate(8)
     item_type = PrimitiveItemType(Types.float64)
     buf.copy_from_list(pos, item_type, [1.234, 2.345, 3.456, 4.567])
     s = buf.as_string()
     assert s == b(
         '\x00\x00\x00\x00\x00\x00\x00\x00'   # garbage
         '\x01\x00\x00\x00\x25\x00\x00\x00'   # ptrlist
         '\x58\x39\xb4\xc8\x76\xbe\xf3\x3f'   # 1.234
         '\xc3\xf5\x28\x5c\x8f\xc2\x02\x40'   # 2.345
         '\xd9\xce\xf7\x53\xe3\xa5\x0b\x40'   # 3.456
         '\xf8\x53\xe3\xa5\x9b\x44\x12\x40')  # 4.567
Beispiel #15
0
def test_read_list_offset():
    buf = b('abcd'  # random garbage
            '\x01\x00\x00\x00\x25\x00\x00\x00'  # ptrlist
            '\x01\x00\x00\x00\x00\x00\x00\x00'  # 1
            '\x02\x00\x00\x00\x00\x00\x00\x00'  # 2
            '\x03\x00\x00\x00\x00\x00\x00\x00'  # 3
            '\x04\x00\x00\x00\x00\x00\x00\x00')  # 4
    blob = Struct.from_buffer(buf, 4, data_size=0, ptrs_size=1)
    lst = blob._read_list(0, PrimitiveItemType(Types.int64))
    assert lst._seg is blob._seg
    assert lst._offset == 12
    assert lst._item_count == 4
    assert lst._item_length == 8
    assert lst._getitem_fast(0) == 1
    assert lst._getitem_fast(1) == 2
    assert lst._getitem_fast(2) == 3
    assert lst._getitem_fast(3) == 4
Beispiel #16
0
 def test_as_list_of_primitives(self):
     schema = """
     @0xbf5147cbbecf40c1;
     struct Foo {
         p @0 :AnyPointer;
     }
     """
     mod = self.compile(schema)
     buf = b('\x01\x00\x00\x00\x25\x00\x00\x00'  # ptrlist
             '\x01\x00\x00\x00\x00\x00\x00\x00'  # 1
             '\x02\x00\x00\x00\x00\x00\x00\x00'  # 2
             '\x03\x00\x00\x00\x00\x00\x00\x00'  # 3
             '\x04\x00\x00\x00\x00\x00\x00\x00')  # 4
     f = mod.Foo.from_buffer(buf, 0, 0, 1)
     assert f.p.is_list()
     assert not f.p.is_struct()
     assert not f.p.is_text()
     items = f.p.as_list(PrimitiveItemType(Types.int64))
     assert items == [1, 2, 3, 4]
Beispiel #17
0
def test_far_pointer_1():
    # see also test_blob.test_far_pointer_1
    seg0 = b('\x00\x00\x00\x00\x00\x00\x00\x00'   # some garbage
            '\x0e\x00\x00\x00\x02\x00\x00\x00')   # far ptr: pad=1, segment=2, offset=1
                                                  # ==> 2nd line of seg2

    seg1 = b('\x00\x00\x00\x00\x00\x00\x00\x00'   # garbage
            '\x01\x00\x00\x00\x00\x00\x00\x00'    # 1
            '\x02\x00\x00\x00\x00\x00\x00\x00'    # 2
            '\x03\x00\x00\x00\x00\x00\x00\x00'    # 3
            '\x04\x00\x00\x00\x00\x00\x00\x00')   # 4

    seg2 = b('\x00\x00\x00\x00\x00\x00\x00\x00'   # garbage
             '\x0a\x00\x00\x00\x01\x00\x00\x00'   # far ptr: pad=0, segment=1, offset=1
                                                  # ==> 2nd line of seg1
             '\x01\x00\x00\x00\x25\x00\x00\x00')  # tag: ptrlist

    buf = MultiSegment(seg0+seg1+seg2,
                       segment_offsets=(0, len(seg0), len(seg0+seg1)))
    blob = Struct.from_buffer(buf, 8, data_size=0, ptrs_size=1)
    lst = blob._read_list(0, PrimitiveItemType(Types.int64))
    assert lst == [1, 2, 3, 4]