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