@@ -10,7 +10,7 @@ class avx512_sort : public ::testing::Test {
10
10
};
11
11
TYPED_TEST_SUITE_P (avx512_sort);
12
12
13
- TYPED_TEST_P (avx512_sort, test_arrsizes )
13
+ TYPED_TEST_P (avx512_sort, test_random )
14
14
{
15
15
if (cpu_has_avx512bw ()) {
16
16
if ((sizeof (TypeParam) == 2 ) && (!cpu_has_avx512_vbmi2 ())) {
@@ -29,7 +29,7 @@ TYPED_TEST_P(avx512_sort, test_arrsizes)
29
29
/* Sort with std::sort for comparison */
30
30
std::sort (sortedarr.begin (), sortedarr.end ());
31
31
avx512_qsort<TypeParam>(arr.data (), arr.size ());
32
- ASSERT_EQ (sortedarr, arr);
32
+ ASSERT_EQ (sortedarr, arr) << " Array size = " << arrsizes[ii] ;
33
33
arr.clear ();
34
34
sortedarr.clear ();
35
35
}
@@ -39,4 +39,94 @@ TYPED_TEST_P(avx512_sort, test_arrsizes)
39
39
}
40
40
}
41
41
42
- REGISTER_TYPED_TEST_SUITE_P (avx512_sort, test_arrsizes);
42
+ TYPED_TEST_P (avx512_sort, test_reverse)
43
+ {
44
+ if (cpu_has_avx512bw ()) {
45
+ if ((sizeof (TypeParam) == 2 ) && (!cpu_has_avx512_vbmi2 ())) {
46
+ GTEST_SKIP () << " Skipping this test, it requires avx512_vbmi2" ;
47
+ }
48
+ std::vector<int64_t > arrsizes;
49
+ for (int64_t ii = 0 ; ii < 1024 ; ++ii) {
50
+ arrsizes.push_back ((TypeParam) (ii + 1 ));
51
+ }
52
+ std::vector<TypeParam> arr;
53
+ std::vector<TypeParam> sortedarr;
54
+ for (size_t ii = 0 ; ii < arrsizes.size (); ++ii) {
55
+ /* reverse array */
56
+ for (int jj = 0 ; jj < arrsizes[ii]; ++jj) {
57
+ arr.push_back ((TypeParam) (arrsizes[ii] - jj));
58
+ }
59
+ sortedarr = arr;
60
+ /* Sort with std::sort for comparison */
61
+ std::sort (sortedarr.begin (), sortedarr.end ());
62
+ avx512_qsort<TypeParam>(arr.data (), arr.size ());
63
+ ASSERT_EQ (sortedarr, arr) << " Array size = " << arrsizes[ii];
64
+ arr.clear ();
65
+ sortedarr.clear ();
66
+ }
67
+ }
68
+ else {
69
+ GTEST_SKIP () << " Skipping this test, it requires avx512bw" ;
70
+ }
71
+ }
72
+
73
+ TYPED_TEST_P (avx512_sort, test_constant)
74
+ {
75
+ if (cpu_has_avx512bw ()) {
76
+ if ((sizeof (TypeParam) == 2 ) && (!cpu_has_avx512_vbmi2 ())) {
77
+ GTEST_SKIP () << " Skipping this test, it requires avx512_vbmi2" ;
78
+ }
79
+ std::vector<int64_t > arrsizes;
80
+ for (int64_t ii = 0 ; ii < 1024 ; ++ii) {
81
+ arrsizes.push_back ((TypeParam) (ii + 1 ));
82
+ }
83
+ std::vector<TypeParam> arr;
84
+ std::vector<TypeParam> sortedarr;
85
+ for (size_t ii = 0 ; ii < arrsizes.size (); ++ii) {
86
+ /* constant array */
87
+ for (int jj = 0 ; jj < arrsizes[ii]; ++jj) {
88
+ arr.push_back (ii);
89
+ }
90
+ sortedarr = arr;
91
+ /* Sort with std::sort for comparison */
92
+ std::sort (sortedarr.begin (), sortedarr.end ());
93
+ avx512_qsort<TypeParam>(arr.data (), arr.size ());
94
+ ASSERT_EQ (sortedarr, arr) << " Array size = " << arrsizes[ii];
95
+ arr.clear ();
96
+ sortedarr.clear ();
97
+ }
98
+ }
99
+ else {
100
+ GTEST_SKIP () << " Skipping this test, it requires avx512bw" ;
101
+ }
102
+ }
103
+
104
+ TYPED_TEST_P (avx512_sort, test_small_range)
105
+ {
106
+ if (cpu_has_avx512bw ()) {
107
+ if ((sizeof (TypeParam) == 2 ) && (!cpu_has_avx512_vbmi2 ())) {
108
+ GTEST_SKIP () << " Skipping this test, it requires avx512_vbmi2" ;
109
+ }
110
+ std::vector<int64_t > arrsizes;
111
+ for (int64_t ii = 0 ; ii < 1024 ; ++ii) {
112
+ arrsizes.push_back ((TypeParam) (ii + 1 ));
113
+ }
114
+ std::vector<TypeParam> arr;
115
+ std::vector<TypeParam> sortedarr;
116
+ for (size_t ii = 0 ; ii < arrsizes.size (); ++ii) {
117
+ arr = get_uniform_rand_array<TypeParam>(arrsizes[ii], 20 , 1 );
118
+ sortedarr = arr;
119
+ /* Sort with std::sort for comparison */
120
+ std::sort (sortedarr.begin (), sortedarr.end ());
121
+ avx512_qsort<TypeParam>(arr.data (), arr.size ());
122
+ ASSERT_EQ (sortedarr, arr) << " Array size = " << arrsizes[ii];
123
+ arr.clear ();
124
+ sortedarr.clear ();
125
+ }
126
+ }
127
+ else {
128
+ GTEST_SKIP () << " Skipping this test, it requires avx512bw" ;
129
+ }
130
+ }
131
+ REGISTER_TYPED_TEST_SUITE_P (avx512_sort,
132
+ test_random, test_reverse, test_constant, test_small_range);
0 commit comments