1*46dbe239SXin Li #include <gtest/gtest.h>
2*46dbe239SXin Li
3*46dbe239SXin Li #include <fxdiv.h>
4*46dbe239SXin Li
TEST(uint32_t,cases)5*46dbe239SXin Li TEST(uint32_t, cases) {
6*46dbe239SXin Li EXPECT_EQ(UINT32_C(0), fxdiv_mulhi_uint32_t(UINT32_C(0), UINT32_C(0)));
7*46dbe239SXin Li EXPECT_EQ(UINT32_C(0), fxdiv_mulhi_uint32_t(UINT32_C(1), UINT32_C(1)));
8*46dbe239SXin Li EXPECT_EQ(UINT32_C(0), fxdiv_mulhi_uint32_t(UINT32_C(1), UINT32_MAX));
9*46dbe239SXin Li EXPECT_EQ(UINT32_C(0), fxdiv_mulhi_uint32_t(UINT32_MAX, UINT32_C(1)));
10*46dbe239SXin Li EXPECT_EQ(UINT32_C(1), fxdiv_mulhi_uint32_t(UINT32_C(65536), UINT32_C(65536)));
11*46dbe239SXin Li EXPECT_EQ(UINT32_MAX - UINT32_C(1), fxdiv_mulhi_uint32_t(UINT32_MAX, UINT32_MAX));
12*46dbe239SXin Li EXPECT_EQ(UINT32_C(28389652), fxdiv_mulhi_uint32_t(UINT32_C(123456789), UINT32_C(987654321)));
13*46dbe239SXin Li EXPECT_EQ(UINT32_C(28389652), fxdiv_mulhi_uint32_t(UINT32_C(987654321), UINT32_C(123456789)));
14*46dbe239SXin Li }
15*46dbe239SXin Li
TEST(uint64_t,cases)16*46dbe239SXin Li TEST(uint64_t, cases) {
17*46dbe239SXin Li EXPECT_EQ(UINT64_C(0), fxdiv_mulhi_uint64_t(UINT64_C(0), UINT64_C(0)));
18*46dbe239SXin Li EXPECT_EQ(UINT64_C(0), fxdiv_mulhi_uint64_t(UINT64_C(1), UINT64_C(1)));
19*46dbe239SXin Li EXPECT_EQ(UINT64_C(0), fxdiv_mulhi_uint64_t(UINT64_C(1), UINT64_MAX));
20*46dbe239SXin Li EXPECT_EQ(UINT64_C(0), fxdiv_mulhi_uint64_t(UINT64_MAX, UINT64_C(1)));
21*46dbe239SXin Li EXPECT_EQ(UINT64_C(1), fxdiv_mulhi_uint64_t(UINT64_C(4294967296), UINT64_C(4294967296)));
22*46dbe239SXin Li EXPECT_EQ(UINT64_MAX - UINT64_C(1), fxdiv_mulhi_uint64_t(UINT64_MAX, UINT64_MAX));
23*46dbe239SXin Li EXPECT_EQ(UINT64_C(66099812259603), fxdiv_mulhi_uint64_t(UINT64_C(12345678987654321), UINT64_C(98765432123456789)));
24*46dbe239SXin Li EXPECT_EQ(UINT64_C(66099812259603), fxdiv_mulhi_uint64_t(UINT64_C(98765432123456789), UINT64_C(12345678987654321)));
25*46dbe239SXin Li }
26*46dbe239SXin Li
TEST(size_t,cases)27*46dbe239SXin Li TEST(size_t, cases) {
28*46dbe239SXin Li EXPECT_EQ(0, fxdiv_mulhi_size_t(0, 0));
29*46dbe239SXin Li EXPECT_EQ(0, fxdiv_mulhi_size_t(1, 1));
30*46dbe239SXin Li EXPECT_EQ(0, fxdiv_mulhi_size_t(1, SIZE_MAX));
31*46dbe239SXin Li EXPECT_EQ(0, fxdiv_mulhi_size_t(SIZE_MAX, 1));
32*46dbe239SXin Li EXPECT_EQ(SIZE_MAX - 1, fxdiv_mulhi_size_t(SIZE_MAX, SIZE_MAX));
33*46dbe239SXin Li }
34