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