Skip to content

Commit 602c127

Browse files
committed
Add unit tests for container_concat and make_uniform_tuple helpers
1 parent 6406ca5 commit 602c127

2 files changed

Lines changed: 150 additions & 0 deletions

File tree

test/util/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,8 @@ add_gtest_executable(unit_sequence unit_sequence.cpp)
55
if(result EQUAL 0)
66
target_link_libraries(unit_sequence PRIVATE utility)
77
endif()
8+
9+
add_gtest_executable(unit_container_helper unit_container_helper.cpp)
10+
if(result EQUAL 0)
11+
target_link_libraries(unit_container_helper PRIVATE utility)
12+
endif()
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
// Copyright (c) Advanced Micro Devices, Inc., or its affiliates.
2+
// SPDX-License-Identifier: MIT
3+
4+
#include <gtest/gtest.h>
5+
#include "ck/utility/container_helper.hpp"
6+
#include "ck/utility/tuple_helper.hpp"
7+
8+
using namespace ck;
9+
10+
// Test container_concat with tuples
11+
TEST(ContainerConcat, ConcatTwoTuples)
12+
{
13+
constexpr auto t1 = make_tuple(Number<7>{}, Number<11>{});
14+
constexpr auto t2 = make_tuple(Number<13>{}, Number<17>{});
15+
constexpr auto result = container_concat(t1, t2);
16+
17+
EXPECT_EQ(result.Size(), 4);
18+
EXPECT_EQ(result[Number<0>{}], 7);
19+
EXPECT_EQ(result[Number<1>{}], 11);
20+
EXPECT_EQ(result[Number<2>{}], 13);
21+
EXPECT_EQ(result[Number<3>{}], 17);
22+
}
23+
24+
TEST(ContainerConcat, ConcatThreeTuples)
25+
{
26+
constexpr auto t1 = make_tuple(Number<19>{});
27+
constexpr auto t2 = make_tuple(Number<23>{}, Number<29>{});
28+
constexpr auto t3 = make_tuple(Number<31>{});
29+
constexpr auto result = container_concat(t1, t2, t3);
30+
31+
EXPECT_EQ(result.Size(), 4);
32+
EXPECT_EQ(result[Number<0>{}], 19);
33+
EXPECT_EQ(result[Number<1>{}], 23);
34+
EXPECT_EQ(result[Number<2>{}], 29);
35+
EXPECT_EQ(result[Number<3>{}], 31);
36+
}
37+
38+
TEST(ContainerConcat, ConcatWithEmptyTuple)
39+
{
40+
constexpr auto t1 = make_tuple(Number<37>{}, Number<41>{});
41+
constexpr auto empty = make_tuple();
42+
constexpr auto result = container_concat(t1, empty);
43+
44+
EXPECT_EQ(result.Size(), 2);
45+
EXPECT_EQ(result[Number<0>{}], 37);
46+
EXPECT_EQ(result[Number<1>{}], 41);
47+
}
48+
49+
TEST(ContainerConcat, ConcatSingleTuple)
50+
{
51+
constexpr auto t1 = make_tuple(Number<43>{}, Number<47>{}, Number<53>{});
52+
constexpr auto result = container_concat(t1);
53+
54+
EXPECT_EQ(result.Size(), 3);
55+
EXPECT_EQ(result[Number<0>{}], 43);
56+
EXPECT_EQ(result[Number<1>{}], 47);
57+
EXPECT_EQ(result[Number<2>{}], 53);
58+
}
59+
60+
// Test container_concat with arrays
61+
TEST(ContainerConcat, ConcatTwoArrays)
62+
{
63+
constexpr auto a1 = make_array(59, 61);
64+
constexpr auto a2 = make_array(67, 71);
65+
constexpr auto result = container_concat(a1, a2);
66+
67+
EXPECT_EQ(result.Size(), 4);
68+
EXPECT_EQ(result[Number<0>{}], 59);
69+
EXPECT_EQ(result[Number<1>{}], 61);
70+
EXPECT_EQ(result[Number<2>{}], 67);
71+
EXPECT_EQ(result[Number<3>{}], 71);
72+
}
73+
74+
// Test make_uniform_tuple
75+
TEST(MakeUniformTuple, Size3)
76+
{
77+
constexpr auto result = make_uniform_tuple<3>(Number<73>{});
78+
79+
EXPECT_EQ(result.Size(), 3);
80+
EXPECT_EQ(result[Number<0>{}], 73);
81+
EXPECT_EQ(result[Number<1>{}], 73);
82+
EXPECT_EQ(result[Number<2>{}], 73);
83+
}
84+
85+
TEST(MakeUniformTuple, Size1)
86+
{
87+
constexpr auto result = make_uniform_tuple<1>(Number<79>{});
88+
89+
EXPECT_EQ(result.Size(), 1);
90+
EXPECT_EQ(result[Number<0>{}], 79);
91+
}
92+
93+
TEST(MakeUniformTuple, Size0)
94+
{
95+
constexpr auto result = make_uniform_tuple<0>(Number<83>{});
96+
97+
EXPECT_EQ(result.Size(), 0);
98+
}
99+
100+
TEST(MakeUniformTuple, Size5)
101+
{
102+
constexpr auto result = make_uniform_tuple<5>(Number<89>{});
103+
104+
EXPECT_EQ(result.Size(), 5);
105+
EXPECT_EQ(result[Number<0>{}], 89);
106+
EXPECT_EQ(result[Number<1>{}], 89);
107+
EXPECT_EQ(result[Number<2>{}], 89);
108+
EXPECT_EQ(result[Number<3>{}], 89);
109+
EXPECT_EQ(result[Number<4>{}], 89);
110+
}
111+
112+
// Test make_tuple_functor (used internally by container_concat)
113+
TEST(MakeTupleFunctor, CreatesTuple)
114+
{
115+
make_tuple_functor functor;
116+
auto result = functor(Number<97>{}, Number<101>{}, Number<103>{});
117+
118+
EXPECT_EQ(result.Size(), 3);
119+
EXPECT_EQ(result[Number<0>{}], 97);
120+
EXPECT_EQ(result[Number<1>{}], 101);
121+
EXPECT_EQ(result[Number<2>{}], 103);
122+
}
123+
124+
// Test container_push_front and container_push_back
125+
TEST(ContainerPush, PushFront)
126+
{
127+
constexpr auto t = make_tuple(Number<109>{}, Number<113>{});
128+
constexpr auto result = container_push_front(t, Number<107>{});
129+
130+
EXPECT_EQ(result.Size(), 3);
131+
EXPECT_EQ(result[Number<0>{}], 107);
132+
EXPECT_EQ(result[Number<1>{}], 109);
133+
EXPECT_EQ(result[Number<2>{}], 113);
134+
}
135+
136+
TEST(ContainerPush, PushBack)
137+
{
138+
constexpr auto t = make_tuple(Number<127>{}, Number<131>{});
139+
constexpr auto result = container_push_back(t, Number<137>{});
140+
141+
EXPECT_EQ(result.Size(), 3);
142+
EXPECT_EQ(result[Number<0>{}], 127);
143+
EXPECT_EQ(result[Number<1>{}], 131);
144+
EXPECT_EQ(result[Number<2>{}], 137);
145+
}

0 commit comments

Comments
 (0)