1 | #include <c10/util/Array.h> |
2 | #include <gtest/gtest.h> |
3 | |
4 | using c10::guts::array; |
5 | using c10::guts::to_array; |
6 | |
7 | namespace { |
8 | namespace test_equals { |
9 | static_assert(array<int, 0>{{}} == array<int, 0>{{}}, "" ); |
10 | static_assert(array<int, 3>{{2, 3, 4}} == array<int, 3>{{2, 3, 4}}, "" ); |
11 | static_assert(!(array<int, 3>{{2, 3, 4}} == array<int, 3>{{1, 3, 4}}), "" ); |
12 | static_assert(!(array<int, 3>{{2, 3, 4}} == array<int, 3>{{2, 1, 4}}), "" ); |
13 | static_assert(!(array<int, 3>{{2, 3, 4}} == array<int, 3>{{2, 3, 1}}), "" ); |
14 | } // namespace test_equals |
15 | |
16 | namespace test_notequals { |
17 | static_assert(!(array<int, 0>{{}} != array<int, 0>{{}}), "" ); |
18 | static_assert(!(array<int, 3>{{2, 3, 4}} != array<int, 3>{{2, 3, 4}}), "" ); |
19 | static_assert(array<int, 3>{{2, 3, 4}} != array<int, 3>{{1, 3, 4}}, "" ); |
20 | static_assert(array<int, 3>{{2, 3, 4}} != array<int, 3>{{2, 1, 4}}, "" ); |
21 | static_assert(array<int, 3>{{2, 3, 4}} != array<int, 3>{{2, 3, 1}}, "" ); |
22 | } // namespace test_notequals |
23 | |
24 | namespace test_lessthan { |
25 | static_assert(!(array<int, 0>{{}} < array<int, 0>{{}}), "" ); |
26 | static_assert(!(array<int, 1>{{2}} < array<int, 1>{{1}}), "" ); |
27 | static_assert(array<int, 1>{{1}} < array<int, 1>{{2}}, "" ); |
28 | static_assert(!(array<int, 3>{{1, 2, 3}} < array<int, 3>{{1, 2, 3}}), "" ); |
29 | static_assert(array<int, 3>{{1, 2, 3}} < array<int, 3>{{2, 2, 3}}, "" ); |
30 | static_assert(!(array<int, 3>{{1, 2, 3}} < array<int, 3>{{0, 2, 3}}), "" ); |
31 | static_assert(array<int, 3>{{1, 2, 3}} < array<int, 3>{{1, 3, 3}}, "" ); |
32 | static_assert(!(array<int, 3>{{1, 2, 3}} < array<int, 3>{{1, 1, 3}}), "" ); |
33 | static_assert(array<int, 3>{{1, 2, 3}} < array<int, 3>{{1, 2, 4}}, "" ); |
34 | static_assert(!(array<int, 3>{{1, 2, 3}} < array<int, 3>{{1, 2, 2}}), "" ); |
35 | } // namespace test_lessthan |
36 | |
37 | namespace test_greaterthan { |
38 | static_assert(!(array<int, 0>{{}} > array<int, 0>{{}}), "" ); |
39 | static_assert(!(array<int, 1>{{1}} > array<int, 1>{{2}}), "" ); |
40 | static_assert(array<int, 1>{{2}} > array<int, 1>{{1}}, "" ); |
41 | static_assert(!(array<int, 3>{{1, 2, 3}} > array<int, 3>{{1, 2, 3}}), "" ); |
42 | static_assert(array<int, 3>{{2, 2, 3}} > array<int, 3>{{1, 2, 3}}, "" ); |
43 | static_assert(!(array<int, 3>{{0, 2, 3}} > array<int, 3>{{1, 2, 3}}), "" ); |
44 | static_assert(array<int, 3>{{1, 3, 3}} > array<int, 3>{{1, 2, 3}}, "" ); |
45 | static_assert(!(array<int, 3>{{1, 1, 3}} > array<int, 3>{{1, 2, 3}}), "" ); |
46 | static_assert(array<int, 3>{{1, 2, 4}} > array<int, 3>{{1, 2, 3}}, "" ); |
47 | static_assert(!(array<int, 3>{{1, 2, 2}} > array<int, 3>{{1, 2, 3}}), "" ); |
48 | } // namespace test_greaterthan |
49 | |
50 | namespace test_lessequals { |
51 | static_assert(array<int, 0>{{}} <= array<int, 0>{{}}, "" ); |
52 | static_assert(!(array<int, 1>{{2}} <= array<int, 1>{{1}}), "" ); |
53 | static_assert(array<int, 1>{{1}} <= array<int, 1>{{2}}, "" ); |
54 | static_assert(array<int, 3>{{1, 2, 3}} <= array<int, 3>{{1, 2, 3}}, "" ); |
55 | static_assert(array<int, 3>{{1, 2, 3}} <= array<int, 3>{{2, 2, 3}}, "" ); |
56 | static_assert(!(array<int, 3>{{1, 2, 3}} <= array<int, 3>{{0, 2, 3}}), "" ); |
57 | static_assert(array<int, 3>{{1, 2, 3}} <= array<int, 3>{{1, 3, 3}}, "" ); |
58 | static_assert(!(array<int, 3>{{1, 2, 3}} <= array<int, 3>{{1, 1, 3}}), "" ); |
59 | static_assert(array<int, 3>{{1, 2, 3}} <= array<int, 3>{{1, 2, 4}}, "" ); |
60 | static_assert(!(array<int, 3>{{1, 2, 3}} <= array<int, 3>{{1, 2, 2}}), "" ); |
61 | } // namespace test_lessequals |
62 | |
63 | namespace test_greaterequals { |
64 | static_assert(array<int, 0>{{}} >= array<int, 0>{{}}, "" ); |
65 | static_assert(!(array<int, 1>{{1}} >= array<int, 1>{{2}}), "" ); |
66 | static_assert(array<int, 1>{{2}} >= array<int, 1>{{1}}, "" ); |
67 | static_assert(array<int, 3>{{1, 2, 3}} >= array<int, 3>{{1, 2, 3}}, "" ); |
68 | static_assert(array<int, 3>{{2, 2, 3}} >= array<int, 3>{{1, 2, 3}}, "" ); |
69 | static_assert(!(array<int, 3>{{0, 2, 3}} >= array<int, 3>{{1, 2, 3}}), "" ); |
70 | static_assert(array<int, 3>{{1, 3, 3}} >= array<int, 3>{{1, 2, 3}}, "" ); |
71 | static_assert(!(array<int, 3>{{1, 1, 3}} >= array<int, 3>{{1, 2, 3}}), "" ); |
72 | static_assert(array<int, 3>{{1, 2, 4}} >= array<int, 3>{{1, 2, 3}}, "" ); |
73 | static_assert(!(array<int, 3>{{1, 2, 2}} >= array<int, 3>{{1, 2, 3}}), "" ); |
74 | } // namespace test_greaterequals |
75 | |
76 | namespace test_tail { |
77 | static_assert(array<int, 2>{{3, 4}} == tail(array<int, 3>{{2, 3, 4}}), "" ); |
78 | static_assert(array<int, 0>{{}} == tail(array<int, 1>{{3}}), "" ); |
79 | } // namespace test_tail |
80 | |
81 | namespace test_prepend { |
82 | static_assert( |
83 | array<int, 3>{{2, 3, 4}} == prepend(2, array<int, 2>{{3, 4}}), |
84 | "" ); |
85 | static_assert(array<int, 1>{{3}} == prepend(3, array<int, 0>{{}}), "" ); |
86 | } // namespace test_prepend |
87 | |
88 | namespace test_to_std_array { |
89 | // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays) |
90 | constexpr int obj2[3] = {3, 5, 6}; |
91 | static_assert(array<int, 3>{{3, 5, 6}} == to_array(obj2), "" ); |
92 | static_assert(array<int, 3>{{3, 5, 6}} == to_array<int, 3>({3, 5, 6}), "" ); |
93 | } // namespace test_to_std_array |
94 | |
95 | } // namespace |
96 | |