test_stl_binders.py 3.1 KB
Newer Older
Dean Moldovan's avatar
Dean Moldovan committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
def test_vector_int():
    from pybind11_tests import VectorInt

    v_int = VectorInt([0, 0])
    assert len(v_int) == 2
    assert bool(v_int) is True

    v_int2 = VectorInt([0, 0])
    assert v_int == v_int2
    v_int2[1] = 1
    assert v_int != v_int2

    v_int2.append(2)
    v_int2.append(3)
    v_int2.insert(0, 1)
    v_int2.insert(0, 2)
    v_int2.insert(0, 3)
    assert str(v_int2) == "VectorInt[3, 2, 1, 0, 1, 2, 3]"

    v_int.append(99)
    v_int2[2:-2] = v_int
    assert v_int2 == VectorInt([3, 2, 0, 0, 99, 2, 3])
    del v_int2[1:3]
    assert v_int2 == VectorInt([3, 0, 99, 2, 3])
    del v_int2[0]
    assert v_int2 == VectorInt([0, 99, 2, 3])


def test_vector_custom():
    from pybind11_tests import El, VectorEl, VectorVectorEl

    v_a = VectorEl()
    v_a.append(El(1))
    v_a.append(El(2))
    assert str(v_a) == "VectorEl[El{1}, El{2}]"

    vv_a = VectorVectorEl()
    vv_a.append(v_a)
    vv_b = vv_a[0]
    assert str(vv_b) == "VectorEl[El{1}, El{2}]"


def test_vector_bool():
    from pybind11_tests import VectorBool

    vv_c = VectorBool()
    for i in range(10):
        vv_c.append(i % 2 == 0)
    for i in range(10):
        assert vv_c[i] == (i % 2 == 0)
    assert str(vv_c) == "VectorBool[1, 0, 1, 0, 1, 0, 1, 0, 1, 0]"
Sergey Lyskov's avatar
Sergey Lyskov committed
52

53

Sergey Lyskov's avatar
Sergey Lyskov committed
54
55
56
57
58
59
60
def test_map_string_double():
    from pybind11_tests import MapStringDouble, UnorderedMapStringDouble

    m = MapStringDouble()
    m['a'] = 1
    m['b'] = 2.5

61
62
    assert list(m) == ['a', 'b']
    assert list(m.items()) == [('a', 1), ('b', 2.5)]
Sergey Lyskov's avatar
Sergey Lyskov committed
63
64
65
66
67
68
    assert str(m) == "MapStringDouble{a: 1, b: 2.5}"

    um = UnorderedMapStringDouble()
    um['ua'] = 1.1
    um['ub'] = 2.6

69
70
71
    assert sorted(list(um)) == ['ua', 'ub']
    assert sorted(list(um.items())) == [('ua', 1.1), ('ub', 2.6)]
    assert "UnorderedMapStringDouble" in str(um)
Sergey Lyskov's avatar
Sergey Lyskov committed
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86


def test_map_string_double_const():
    from pybind11_tests import MapStringDoubleConst, UnorderedMapStringDoubleConst

    mc = MapStringDoubleConst()
    mc['a'] = 10
    mc['b'] = 20.5
    assert str(mc) == "MapStringDoubleConst{a: 10, b: 20.5}"

    umc = UnorderedMapStringDoubleConst()
    umc['a'] = 11
    umc['b'] = 21.5

    str(umc)
87

88

89
def test_noncopyable_vector():
90
    from pybind11_tests import get_vnc
91
92
93

    vnc = get_vnc(5)
    for i in range(0, 5):
94
95
96
97
        assert vnc[i].value == i + 1

    for i, j in enumerate(vnc, start=1):
        assert j.value == i
98
99
100


def test_noncopyable_deque():
101
    from pybind11_tests import get_dnc
102
103
104

    dnc = get_dnc(5)
    for i in range(0, 5):
105
        assert dnc[i].value == i + 1
106
107
108
109
110
111

    i = 1
    for j in dnc:
        assert(j.value == i)
        i += 1

112

113
def test_noncopyable_map():
114
    from pybind11_tests import get_mnc
115
116
117

    mnc = get_mnc(5)
    for i in range(1, 6):
118
        assert mnc[i].value == 10 * i
119
120
121

    vsum = 0
    for k, v in mnc.items():
122
        assert v.value == 10 * k
123
124
        vsum += v.value

125
126
    assert vsum == 150

127
128

def test_noncopyable_unordered_map():
129
    from pybind11_tests import get_umnc
130
131
132

    mnc = get_umnc(5)
    for i in range(1, 6):
133
        assert mnc[i].value == 10 * i
134
135
136

    vsum = 0
    for k, v in mnc.items():
137
        assert v.value == 10 * k
138
139
        vsum += v.value

140
    assert vsum == 150