Skip to content

Commit a373416

Browse files
authored
Switch remaining SIMD unit tests to EXPECT_EQ (#603)
1 parent 6a1adc9 commit a373416

2 files changed

Lines changed: 59 additions & 51 deletions

File tree

.github/workflows/build_test_rv.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@ on:
1212
- main
1313
paths:
1414
- 'Source/astcenc_vecmathlib_rvv_n.h'
15+
- 'Source/UnitTest/test_simd.cpp'
1516

1617
jobs:
1718
build-ubuntu-rvv256-clang:
1819
name: Ubuntu rvv256 Clang
1920
runs-on: ubuntu-24.04
2021
steps:
2122
- name: Git checkout
22-
uses: actions/checkout@v4
23+
uses: actions/checkout@v6
2324
with:
2425
submodules: 'true'
2526

Source/UnitTest/test_simd.cpp

Lines changed: 57 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// SPDX-License-Identifier: Apache-2.0
22
// ----------------------------------------------------------------------------
3-
// Copyright 2020-2025 Arm Limited
3+
// Copyright 2020-2026 Arm Limited
44
//
55
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
66
// use this file except in compliance with the License. You may obtain a copy
@@ -17,6 +17,12 @@
1717

1818
/**
1919
* @brief Unit tests for the vectorized SIMD functionality.
20+
*
21+
* One of the implementation requirements for astcenc is to provide a platform
22+
* invariant results, so tests deliberately use EXPECT_EQ() for floating-point
23+
* functions that might more typically use EXPECT_NEAR(). If we change an
24+
* implementation of a function so it rounds differently, the tests may start
25+
* failing and the values in the test may need updating.
2026
*/
2127

2228
#include <limits>
@@ -145,19 +151,19 @@ TEST(SuiteVfloat, Atan)
145151
{
146152
vfloat a0(-0.15f);
147153
vfloat r0 = atan(a0);
148-
EXPECT_NEAR(r0.lane<0>(), -0.149061f, 0.005f);
154+
EXPECT_EQ(r0.lane<0>(), -0.149060920f);
149155

150156
vfloat a1(0.0f);
151157
vfloat r1 = atan(a1);
152-
EXPECT_NEAR(r1.lane<0>(), 0.000000f, 0.005f);
158+
EXPECT_EQ(r1.lane<0>(), 0.000000000f);
153159

154160
vfloat a2(0.9f);
155161
vfloat r2 = atan(a2);
156-
EXPECT_NEAR(r2.lane<0>(), 0.733616f, 0.005f);
162+
EXPECT_EQ(r2.lane<0>(), 0.733615935f);
157163

158164
vfloat a3(2.1f);
159165
vfloat r3 = atan(a3);
160-
EXPECT_NEAR(r3.lane<0>(), 1.123040f, 0.005f);
166+
EXPECT_EQ(r3.lane<0>(), 1.123035190f);
161167
}
162168

163169
/** @brief Test VLA atan2. */
@@ -166,22 +172,22 @@ TEST(SuiteVfloat, Atan2)
166172
vfloat a0(-0.15f);
167173
vfloat b0( 1.15f);
168174
vfloat r0 = atan2(a0, b0);
169-
EXPECT_NEAR(r0.lane<0>(), -0.129816f, 0.005f);
175+
EXPECT_EQ(r0.lane<0>(), -0.129816383f);
170176

171177
vfloat a1( 0.0f);
172178
vfloat b1(-3.0f);
173179
vfloat r1 = atan2(a1, b1);
174-
EXPECT_NEAR(r1.lane<0>(), 3.141592f, 0.005f);
180+
EXPECT_EQ(r1.lane<0>(), 3.141592740f);
175181

176182
vfloat a2( 0.9f);
177183
vfloat b2(-0.9f);
178184
vfloat r2 = atan2(a2, b2);
179-
EXPECT_NEAR(r2.lane<0>(), 2.360342f, 0.005f);
185+
EXPECT_EQ(r2.lane<0>(), 2.360342740f);
180186

181187
vfloat a3( 2.1f);
182188
vfloat b3( 1.1f);
183189
vfloat r3 = atan2(a3, b3);
184-
EXPECT_NEAR(r3.lane<0>(), 1.084357f, 0.005f);
190+
EXPECT_EQ(r3.lane<0>(), 1.084357620f);
185191
}
186192

187193
#elif ASTCENC_SIMD_WIDTH == 4
@@ -207,10 +213,10 @@ TEST(SuiteVfloat, Atan)
207213
vfloat4 a(-0.15f, 0.0f, 0.9f, 2.1f);
208214
vfloat4 r = atan(a);
209215

210-
EXPECT_NEAR(r.lane<0>(), -0.149061f, 0.005f);
211-
EXPECT_NEAR(r.lane<1>(), 0.000000f, 0.005f);
212-
EXPECT_NEAR(r.lane<2>(), 0.733616f, 0.005f);
213-
EXPECT_NEAR(r.lane<3>(), 1.123040f, 0.005f);
216+
EXPECT_EQ(r.lane<0>(), -0.149060920f);
217+
EXPECT_EQ(r.lane<1>(), 0.000000000f);
218+
EXPECT_EQ(r.lane<2>(), 0.733615935f);
219+
EXPECT_EQ(r.lane<3>(), 1.123035190f);
214220
}
215221

216222
/** @brief Test VLA atan2. */
@@ -220,10 +226,10 @@ TEST(SuiteVfloat, Atan2)
220226
vfloat4 b(1.15f, -3.0f, -0.9f, 1.1f);
221227
vfloat4 r = atan2(a, b);
222228

223-
EXPECT_NEAR(r.lane<0>(), -0.129816f, 0.005f);
224-
EXPECT_NEAR(r.lane<1>(), 3.141592f, 0.005f);
225-
EXPECT_NEAR(r.lane<2>(), 2.360342f, 0.005f);
226-
EXPECT_NEAR(r.lane<3>(), 1.084357f, 0.005f);
229+
EXPECT_EQ(r.lane<0>(), -0.129816383f);
230+
EXPECT_EQ(r.lane<1>(), 3.141592740f);
231+
EXPECT_EQ(r.lane<2>(), 2.360342740f);
232+
EXPECT_EQ(r.lane<3>(), 1.084357620f);
227233
}
228234

229235
#elif ASTCENC_SIMD_WIDTH == 8
@@ -259,14 +265,14 @@ TEST(SuiteVfloat, Atan)
259265
alignas(32) float ra[8];
260266
storea(r, ra);
261267

262-
EXPECT_NEAR(ra[0], -0.149061f, 0.005f);
263-
EXPECT_NEAR(ra[1], 0.000000f, 0.005f);
264-
EXPECT_NEAR(ra[2], 0.733616f, 0.005f);
265-
EXPECT_NEAR(ra[3], 1.123040f, 0.005f);
266-
EXPECT_NEAR(ra[4], -0.149061f, 0.005f);
267-
EXPECT_NEAR(ra[5], 0.000000f, 0.005f);
268-
EXPECT_NEAR(ra[6], 0.733616f, 0.005f);
269-
EXPECT_NEAR(ra[7], 1.123040f, 0.005f);
268+
EXPECT_EQ(ra[0], -0.149060920f);
269+
EXPECT_EQ(ra[1], 0.000000000f);
270+
EXPECT_EQ(ra[2], 0.733615935f);
271+
EXPECT_EQ(ra[3], 1.123035190f);
272+
EXPECT_EQ(ra[4], -0.149060920f);
273+
EXPECT_EQ(ra[5], 0.000000000f);
274+
EXPECT_EQ(ra[6], 0.733615935f);
275+
EXPECT_EQ(ra[7], 1.123035190f);
270276
}
271277

272278
/** @brief Test VLA atan2. */
@@ -279,14 +285,14 @@ TEST(SuiteVfloat, Atan2)
279285
alignas(32) float ra[8];
280286
storea(r, ra);
281287

282-
EXPECT_NEAR(ra[0], -0.129816f, 0.005f);
283-
EXPECT_NEAR(ra[1], 3.141592f, 0.005f);
284-
EXPECT_NEAR(ra[2], 2.360342f, 0.005f);
285-
EXPECT_NEAR(ra[3], 1.084357f, 0.005f);
286-
EXPECT_NEAR(ra[4], -0.129816f, 0.005f);
287-
EXPECT_NEAR(ra[5], 3.141592f, 0.005f);
288-
EXPECT_NEAR(ra[6], 2.360342f, 0.005f);
289-
EXPECT_NEAR(ra[7], 1.084357f, 0.005f);
288+
EXPECT_EQ(ra[0], -0.129816383f);
289+
EXPECT_EQ(ra[1], 3.141592740f);
290+
EXPECT_EQ(ra[2], 2.360342740f);
291+
EXPECT_EQ(ra[3], 1.084357620f);
292+
EXPECT_EQ(ra[4], -0.129816383f);
293+
EXPECT_EQ(ra[5], 3.141592740f);
294+
EXPECT_EQ(ra[6], 2.360342740f);
295+
EXPECT_EQ(ra[7], 1.084357620f);
290296
}
291297

292298
#endif
@@ -483,10 +489,10 @@ TEST(SuiteVfloat4, vselfadd1)
483489

484490
// Test increment by an expression
485491
a += b + b;
486-
EXPECT_NEAR(a.lane<0>(), 1.0f + 0.3f, 0.001f);
487-
EXPECT_NEAR(a.lane<1>(), 2.0f + 0.6f, 0.001f);
488-
EXPECT_NEAR(a.lane<2>(), 3.0f + 0.9f, 0.001f);
489-
EXPECT_NEAR(a.lane<3>(), 4.0f + 1.2f, 0.001f);
492+
EXPECT_EQ(a.lane<0>(), 1.30000007f);
493+
EXPECT_EQ(a.lane<1>(), 2.60000014f);
494+
EXPECT_EQ(a.lane<2>(), 3.90000010f);
495+
EXPECT_EQ(a.lane<3>(), 5.20000029f);
490496
}
491497

492498
/** @brief Test vfloat4 sub. */
@@ -862,9 +868,9 @@ TEST(SuiteVfloat4, hmax_s)
862868
TEST(SuiteVfloat4, hadd_s)
863869
{
864870
vfloat4 a1(1.1f, 1.5f, 1.6f, 4.0f);
865-
float sum = 1.1f + 1.5f + 1.6f + 4.0f;
871+
float sum = (1.1f + 1.6f) + (1.5f + 4.0f);
866872
float r = hadd_s(a1);
867-
EXPECT_NEAR(r, sum, 0.005f);
873+
EXPECT_EQ(r, sum);
868874
}
869875

870876
/** @brief Test vfloat4 hadd_rgb_s. */
@@ -873,7 +879,7 @@ TEST(SuiteVfloat4, hadd_rgb_s)
873879
vfloat4 a1(1.1f, 1.5f, 1.6f, 4.0f);
874880
float sum = 1.1f + 1.5f + 1.6f;
875881
float r = hadd_rgb_s(a1);
876-
EXPECT_NEAR(r, sum, 0.005f);
882+
EXPECT_EQ(r, sum);
877883
}
878884

879885
/** @brief Test vfloat4 sqrt. */
@@ -1026,10 +1032,10 @@ TEST(SuiteVfloat4, normalize)
10261032
{
10271033
vfloat4 a(1.0f, 2.0f, 3.0f, 4.0f);
10281034
vfloat4 r = normalize(a);
1029-
EXPECT_NEAR(r.lane<0>(), 1.0f / astc::sqrt(30.0f), 0.0005f);
1030-
EXPECT_NEAR(r.lane<1>(), 2.0f / astc::sqrt(30.0f), 0.0005f);
1031-
EXPECT_NEAR(r.lane<2>(), 3.0f / astc::sqrt(30.0f), 0.0005f);
1032-
EXPECT_NEAR(r.lane<3>(), 4.0f / astc::sqrt(30.0f), 0.0005f);
1035+
EXPECT_EQ(r.lane<0>(), 1.0f / astc::sqrt(30.0f));
1036+
EXPECT_EQ(r.lane<1>(), 2.0f / astc::sqrt(30.0f));
1037+
EXPECT_EQ(r.lane<2>(), 3.0f / astc::sqrt(30.0f));
1038+
EXPECT_EQ(r.lane<3>(), 4.0f / astc::sqrt(30.0f));
10331039
}
10341040

10351041
/** @brief Test vfloat4 normalize_safe. */
@@ -1039,10 +1045,10 @@ TEST(SuiteVfloat4, normalize_safe)
10391045

10401046
vfloat4 a1(1.0f, 2.0f, 3.0f, 4.0f);
10411047
vfloat4 r1 = normalize_safe(a1, s);
1042-
EXPECT_NEAR(r1.lane<0>(), 1.0f / astc::sqrt(30.0f), 0.0005f);
1043-
EXPECT_NEAR(r1.lane<1>(), 2.0f / astc::sqrt(30.0f), 0.0005f);
1044-
EXPECT_NEAR(r1.lane<2>(), 3.0f / astc::sqrt(30.0f), 0.0005f);
1045-
EXPECT_NEAR(r1.lane<3>(), 4.0f / astc::sqrt(30.0f), 0.0005f);
1048+
EXPECT_EQ(r1.lane<0>(), 1.0f / astc::sqrt(30.0f));
1049+
EXPECT_EQ(r1.lane<1>(), 2.0f / astc::sqrt(30.0f));
1050+
EXPECT_EQ(r1.lane<2>(), 3.0f / astc::sqrt(30.0f));
1051+
EXPECT_EQ(r1.lane<3>(), 4.0f / astc::sqrt(30.0f));
10461052

10471053
vfloat4 a2(0.0f, 0.0f, 0.0f, 0.0f);
10481054
vfloat4 r2 = normalize_safe(a2, s);
@@ -2656,9 +2662,10 @@ TEST(SuiteVfloat8, hmax_s)
26562662
TEST(SuiteVfloat8, hadd_s)
26572663
{
26582664
vfloat8 a1 = vfloat8_lit(1.1f, 1.5f, 1.6f, 4.0f, 1.1f, 1.5f, 1.6f, 4.0f);
2659-
float sum = 1.1f + 1.5f + 1.6f + 4.0f + 1.1f + 1.5f + 1.6f + 4.0f;
2665+
float sum = ((1.1f + 1.6f) + (1.5f + 4.0f)) +
2666+
((1.1f + 1.6f) + (1.5f + 4.0f));
26602667
float r = hadd_s(a1);
2661-
EXPECT_NEAR(r, sum, 0.005f);
2668+
EXPECT_EQ(r, sum);
26622669
}
26632670

26642671
/** @brief Test vfloat8 sqrt. */

0 commit comments

Comments
 (0)