1import addconstant
2import numpy
3
4
5ERROR_THRESHOLD = 0.0001
6
7
8def test():
9    constant_u1 = True
10    constant_u8 = 3
11    constant_u16 = 49153
12    constant_u32 = 65537
13    constant_u64 = 5724968371
14    constant_i8 = -7
15    constant_i16 = -30712
16    constant_i32 = -98901
17    constant_i64 = -8163465847
18    constant_float = 3.14159
19    constant_double = 1.61803
20
21    input_u8 = numpy.array([0, 1, 2], dtype=numpy.uint8)
22    input_u16 = numpy.array([0, 256, 512], dtype=numpy.uint16)
23    input_u32 = numpy.array([0, 65536, 131072], dtype=numpy.uint32)
24    input_u64 = numpy.array([0, 4294967296, 8589934592], dtype=numpy.uint64)
25    input_i8 = numpy.array([1, -2, 3], dtype=numpy.int8)
26    input_i16 = numpy.array([1, -256, 512], dtype=numpy.int16)
27    input_i32 = numpy.array([1, -65536, 131072], dtype=numpy.int32)
28    input_i64 = numpy.array([0, -4294967296, 8589934592], dtype=numpy.int64)
29    input_float = numpy.array([3.14, 2.718, 1.618], dtype=numpy.float32)
30    input_double = numpy.array([3.14, 2.718, 1.618], dtype=numpy.float64)
31    input_2d = numpy.array([[1, 2, 3], [4, 5, 6]], dtype=numpy.int8, order='F')
32    input_3d = numpy.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]], dtype=numpy.int8)
33
34    output_u8 = numpy.zeros((3,), dtype=numpy.uint8)
35    output_u16 = numpy.zeros((3,), dtype=numpy.uint16)
36    output_u32 = numpy.zeros((3,), dtype=numpy.uint32)
37    output_u64 = numpy.zeros((3,), dtype=numpy.uint64)
38    output_i8 = numpy.zeros((3,), dtype=numpy.int8)
39    output_i16 = numpy.zeros((3,), dtype=numpy.int16)
40    output_i32 = numpy.zeros((3,), dtype=numpy.int32)
41    output_i64 = numpy.zeros((3,), dtype=numpy.int64)
42    output_float = numpy.zeros((3,), dtype=numpy.float32)
43    output_double = numpy.zeros((3,), dtype=numpy.float64)
44    output_2d = numpy.zeros((2, 3), dtype=numpy.int8, order='F')
45    output_3d = numpy.zeros((2, 2, 2), dtype=numpy.int8)
46
47    addconstant.addconstant(
48        constant_u1,
49        constant_u8, constant_u16, constant_u32, constant_u64,
50        constant_i8, constant_i16, constant_i32, constant_i64,
51        constant_float, constant_double,
52        input_u8, input_u16, input_u32, input_u64,
53        input_i8, input_i16, input_i32, input_i64,
54        input_float, input_double, input_2d, input_3d,
55        output_u8, output_u16, output_u32, output_u64,
56        output_i8, output_i16, output_i32, output_i64,
57        output_float, output_double, output_2d, output_3d,
58    )
59
60    combinations = [
61        ("u8", input_u8, output_u8, constant_u8),
62        ("u16", input_u16, output_u16, constant_u16),
63        ("u32", input_u32, output_u32, constant_u32),
64        ("u64", input_u64, output_u64, constant_u64),
65        ("i8", input_i8, output_i8, constant_i8),
66        ("i16", input_i16, output_i16, constant_i16),
67        ("i32", input_i32, output_i32, constant_i32),
68        ("i64", input_i64, output_i64, constant_i64),
69        ("float", input_float, output_float, constant_float),
70        ("double", input_double, output_double, constant_double),
71    ]
72
73    for _, input, output, constant in combinations:
74        for i, o in zip(input, output):
75            assert abs(o - (i + constant)) < ERROR_THRESHOLD
76
77    for x in range(input_2d.shape[0]):
78        for y in range(input_2d.shape[1]):
79            assert output_2d[x, y] == input_2d[x, y] + constant_i8
80
81    for x in range(input_3d.shape[0]):
82        for y in range(input_3d.shape[1]):
83            for z in range(input_3d.shape[2]):
84                assert output_3d[x, y, z] == input_3d[x, y, z] + constant_i8
85
86
87if __name__ == "__main__":
88  test()
89