xref: /aosp_15_r20/external/mesa3d/src/asahi/compiler/test/test-minifloat.cpp (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2021-2022 Alyssa Rosenzweig
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker #include "agx_test.h"
7*61046927SAndroid Build Coastguard Worker 
8*61046927SAndroid Build Coastguard Worker #include <gtest/gtest.h>
9*61046927SAndroid Build Coastguard Worker 
TEST(Minifloat,RepresentativeValues)10*61046927SAndroid Build Coastguard Worker TEST(Minifloat, RepresentativeValues)
11*61046927SAndroid Build Coastguard Worker {
12*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(agx_minifloat_decode(0), 0.0f);
13*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(agx_minifloat_decode(25), 0.390625f);
14*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(agx_minifloat_decode(135), -0.109375f);
15*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(agx_minifloat_decode(255), -31.0);
16*61046927SAndroid Build Coastguard Worker }
17*61046927SAndroid Build Coastguard Worker 
TEST(Minifloat,Exactness)18*61046927SAndroid Build Coastguard Worker TEST(Minifloat, Exactness)
19*61046927SAndroid Build Coastguard Worker {
20*61046927SAndroid Build Coastguard Worker    EXPECT_TRUE(agx_minifloat_exact(0.0f));
21*61046927SAndroid Build Coastguard Worker    EXPECT_TRUE(agx_minifloat_exact(0.390625f));
22*61046927SAndroid Build Coastguard Worker    EXPECT_TRUE(agx_minifloat_exact(-0.109375f));
23*61046927SAndroid Build Coastguard Worker    EXPECT_TRUE(agx_minifloat_exact(-31.0));
24*61046927SAndroid Build Coastguard Worker    EXPECT_FALSE(agx_minifloat_exact(3.141f));
25*61046927SAndroid Build Coastguard Worker    EXPECT_FALSE(agx_minifloat_exact(2.718f));
26*61046927SAndroid Build Coastguard Worker    EXPECT_FALSE(agx_minifloat_exact(1.618f));
27*61046927SAndroid Build Coastguard Worker }
28*61046927SAndroid Build Coastguard Worker 
TEST(Minifloat,AllValuesRoundtrip)29*61046927SAndroid Build Coastguard Worker TEST(Minifloat, AllValuesRoundtrip)
30*61046927SAndroid Build Coastguard Worker {
31*61046927SAndroid Build Coastguard Worker    for (unsigned i = 0; i < 0x100; ++i) {
32*61046927SAndroid Build Coastguard Worker       float f = agx_minifloat_decode(i);
33*61046927SAndroid Build Coastguard Worker       EXPECT_EQ(agx_minifloat_encode(f), i);
34*61046927SAndroid Build Coastguard Worker       EXPECT_TRUE(agx_minifloat_exact(f));
35*61046927SAndroid Build Coastguard Worker    }
36*61046927SAndroid Build Coastguard Worker }
37