#include "caffe2/utils/Array.h" #include using c10::guts::array; using c10::guts::to_array; namespace { namespace test_equals { static_assert(array{{}} == array{{}}, ""); static_assert(array{{2, 3, 4}} == array{{2, 3, 4}}, ""); static_assert(!(array{{2, 3, 4}} == array{{1, 3, 4}}), ""); static_assert(!(array{{2, 3, 4}} == array{{2, 1, 4}}), ""); static_assert(!(array{{2, 3, 4}} == array{{2, 3, 1}}), ""); } namespace test_notequals { static_assert(!(array{{}} != array{{}}), ""); static_assert(!(array{{2, 3, 4}} != array{{2, 3, 4}}), ""); static_assert(array{{2, 3, 4}} != array{{1, 3, 4}}, ""); static_assert(array{{2, 3, 4}} != array{{2, 1, 4}}, ""); static_assert(array{{2, 3, 4}} != array{{2, 3, 1}}, ""); } namespace test_lessthan { static_assert(!(array{{}} < array{{}}), ""); static_assert(!(array{{2}} < array{{1}}), ""); static_assert(array{{1}} < array{{2}}, ""); static_assert(!(array{{1, 2, 3}} < array{{1, 2, 3}}), ""); static_assert(array{{1, 2, 3}} < array{{2, 2, 3}}, ""); static_assert(!(array{{1, 2, 3}} < array{{0, 2, 3}}), ""); static_assert(array{{1, 2, 3}} < array{{1, 3, 3}}, ""); static_assert(!(array{{1, 2, 3}} < array{{1, 1, 3}}), ""); static_assert(array{{1, 2, 3}} < array{{1, 2, 4}}, ""); static_assert(!(array{{1, 2, 3}} < array{{1, 2, 2}}), ""); } namespace test_greaterthan { static_assert(!(array{{}} > array{{}}), ""); static_assert(!(array{{1}} > array{{2}}), ""); static_assert(array{{2}} > array{{1}}, ""); static_assert(!(array{{1, 2, 3}} > array{{1, 2, 3}}), ""); static_assert(array{{2, 2, 3}} > array{{1, 2, 3}}, ""); static_assert(!(array{{0, 2, 3}} > array{{1, 2, 3}}), ""); static_assert(array{{1, 3, 3}} > array{{1, 2, 3}}, ""); static_assert(!(array{{1, 1, 3}} > array{{1, 2, 3}}), ""); static_assert(array{{1, 2, 4}} > array{{1, 2, 3}}, ""); static_assert(!(array{{1, 2, 2}} > array{{1, 2, 3}}), ""); } namespace test_lessequals { static_assert(array{{}} <= array{{}}, ""); static_assert(!(array{{2}} <= array{{1}}), ""); static_assert(array{{1}} <= array{{2}}, ""); static_assert(array{{1, 2, 3}} <= array{{1, 2, 3}}, ""); static_assert(array{{1, 2, 3}} <= array{{2, 2, 3}}, ""); static_assert(!(array{{1, 2, 3}} <= array{{0, 2, 3}}), ""); static_assert(array{{1, 2, 3}} <= array{{1, 3, 3}}, ""); static_assert(!(array{{1, 2, 3}} <= array{{1, 1, 3}}), ""); static_assert(array{{1, 2, 3}} <= array{{1, 2, 4}}, ""); static_assert(!(array{{1, 2, 3}} <= array{{1, 2, 2}}), ""); } namespace test_greaterequals { static_assert(array{{}} >= array{{}}, ""); static_assert(!(array{{1}} >= array{{2}}), ""); static_assert(array{{2}} >= array{{1}}, ""); static_assert(array{{1, 2, 3}} >= array{{1, 2, 3}}, ""); static_assert(array{{2, 2, 3}} >= array{{1, 2, 3}}, ""); static_assert(!(array{{0, 2, 3}} >= array{{1, 2, 3}}), ""); static_assert(array{{1, 3, 3}} >= array{{1, 2, 3}}, ""); static_assert(!(array{{1, 1, 3}} >= array{{1, 2, 3}}), ""); static_assert(array{{1, 2, 4}} >= array{{1, 2, 3}}, ""); static_assert(!(array{{1, 2, 2}} >= array{{1, 2, 3}}), ""); } namespace test_tail { static_assert(array < int, 2 > {{3, 4}} == tail(array < int, 3 > {{2, 3, 4}}), ""); static_assert(array < int, 0 > {{}} == tail(array < int, 1 > {{3}}), ""); } TEST(ArrayTest, TestPrepend) { // Some compilers can't handle move results as constexpr, so use // gtest assert for this test ASSERT_EQ((array {{2, 3, 4}}), (prepend(2, array {{3, 4}}))); ASSERT_EQ((array {{3}}), (prepend(3, array {{}}))); } namespace test_to_std_array { constexpr int obj2[3] = {3, 5, 6}; static_assert(array < int, 3 > {{3, 5, 6}} == to_array(obj2), ""); static_assert(array < int, 3 > {{3, 5, 6}} == to_array({3, 5, 6}), ""); } }