3
#include <gtest/gtest.h>
7
typedef FixedPoint<int32_t, 17> fixed16_t;
8
typedef FixedPoint<int16_t, 8> fixed8_t;
9
const double threshold = 0.01;
14
EXPECT_EQ(0, p0.IntegerPart());
15
EXPECT_EQ(0u, p0.FractionalPart());
18
EXPECT_EQ(100, p1.IntegerPart());
19
EXPECT_EQ(0u, p1.FractionalPart());
22
EXPECT_EQ(100, p2.IntegerPart());
23
EXPECT_EQ(0, p2.FractionalPart());
26
EXPECT_EQ(0, p3.IntegerPart());
27
EXPECT_EQ(0u, p3.FractionalPart());
30
EXPECT_EQ(100, p4.IntegerPart());
33
EXPECT_EQ(-100, p5.IntegerPart());
39
fixed16_t p1(50.4), p2(-100.5), p3;
41
EXPECT_NEAR(-50.1f, p3.ToFloat(), threshold);
44
EXPECT_NEAR(-40.1f, p3.ToFloat(), threshold);
46
p3 += fixed16_t(-100.2f);
47
EXPECT_NEAR(-140.3f, p3.ToFloat(), threshold);
50
EXPECT_NEAR(60.4f, p3.ToFloat(), threshold);
53
EXPECT_NEAR(-90.5f, p3.ToFloat(), threshold);
56
TEST(FixedPoint, Minus)
58
fixed16_t p1(50.4), p2(-100.5), p3;
60
EXPECT_NEAR(150.9, p3.ToDouble(), threshold);
63
EXPECT_NEAR(140.9, p3.ToDouble(), threshold);
65
p3 -= fixed16_t(-100.2);
66
EXPECT_NEAR(241.1, p3.ToDouble(), threshold);
69
EXPECT_NEAR(40.4, p3.ToDouble(), threshold);
72
EXPECT_NEAR(110.5, p3.ToDouble(), threshold);
75
TEST(FixedPoint, Multiply)
77
fixed16_t p1(50.4), p2(-100.5), p3;
79
EXPECT_NEAR(-5065.2, p3.ToDouble(), threshold);
82
EXPECT_NEAR(-10130.4, p3.ToDouble(), threshold);
85
EXPECT_NEAR(-1013, p3.ToDouble(), 0.25);
88
EXPECT_NEAR(504.0, p3.ToDouble(), threshold);
91
EXPECT_NEAR(-1005.0, p3.ToDouble(), threshold);
93
p3 = fixed16_t(0.1) * fixed16_t(0.1);
94
EXPECT_NEAR(0.01, p3.ToDouble(), threshold);
97
TEST(FixedPoint, Divide)
99
EXPECT_NEAR(1.0, (fixed16_t(0.1) / fixed16_t(0.1)).ToDouble(), threshold);
101
fixed16_t p1(100), p2(12), p3;
103
EXPECT_NEAR(8.33333, p3.ToDouble(), threshold);
106
EXPECT_NEAR(-4.16666, p3.ToDouble(), threshold);
108
p3 /= fixed16_t(0.1);
109
EXPECT_NEAR(-41.6666, p3.ToDouble(), threshold*2);
112
EXPECT_NEAR(10, p3.ToDouble(), threshold);
115
EXPECT_NEAR(10.0 / 12.0, p3.ToDouble(), threshold);