]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- |
2 | // vim: ts=8 sw=2 smarttab | |
3 | ||
4 | #include <iostream> | |
5 | #include <gtest/gtest.h> | |
6 | ||
7 | #include "include/intarith.h" | |
8 | ||
9 | TEST(intarith, cbits) { | |
10 | ASSERT_EQ(0u, cbits(0)); | |
11 | ASSERT_EQ(1u, cbits(1)); | |
12 | ASSERT_EQ(2u, cbits(2)); | |
13 | ASSERT_EQ(2u, cbits(3)); | |
14 | ASSERT_EQ(3u, cbits(4)); | |
15 | ASSERT_EQ(0u, cbitsl(0)); | |
16 | ASSERT_EQ(1u, cbitsl(1)); | |
17 | ASSERT_EQ(2u, cbitsl(2)); | |
18 | ASSERT_EQ(2u, cbitsl(3)); | |
19 | ASSERT_EQ(3u, cbitsl(4)); | |
20 | ASSERT_EQ(9u, cbits(0x100)); | |
21 | ASSERT_EQ(32u, cbits(0xffffffff)); | |
22 | ASSERT_EQ(32u, cbitsl(0xffffffff)); | |
23 | ASSERT_EQ(32u, cbitsll(0xffffffff)); | |
24 | ASSERT_EQ(64u, cbitsll(0xffffffffffffffff)); | |
25 | } | |
26 | ||
27 | TEST(intarith, clz) { | |
28 | ASSERT_EQ(32u, clz(0)); | |
29 | ASSERT_EQ(31u, clz(1)); | |
30 | ASSERT_EQ(30u, clz(2)); | |
31 | ASSERT_EQ(30u, clz(3)); | |
32 | ASSERT_EQ(29u, clz(4)); | |
33 | ASSERT_EQ(64u, clzll(0)); | |
34 | ASSERT_EQ(63u, clzll(1)); | |
35 | ASSERT_EQ(62u, clzll(2)); | |
36 | ASSERT_EQ(62u, clzll(3)); | |
37 | ASSERT_EQ(61u, clzll(4)); | |
38 | ASSERT_EQ(23u, clz(0x100)); | |
39 | ASSERT_EQ(55u, clzll(0x100)); | |
40 | ASSERT_EQ(0u, clz(0xffffffff)); | |
41 | ASSERT_EQ(32u, clzll(0xffffffff)); | |
42 | ASSERT_EQ(0u, clzll(0xffffffffffffffff)); | |
43 | } | |
44 | ||
45 | TEST(intarith, ctz) { | |
46 | ASSERT_EQ(32u, ctz(0)); | |
47 | ASSERT_EQ(0u, ctz(1)); | |
48 | ASSERT_EQ(1u, ctz(2)); | |
49 | ASSERT_EQ(0u, ctz(3)); | |
50 | ASSERT_EQ(2u, ctz(4)); | |
51 | ASSERT_EQ(64u, ctzll(0)); | |
52 | ASSERT_EQ(0u, ctzll(1)); | |
53 | ASSERT_EQ(1u, ctzll(2)); | |
54 | ASSERT_EQ(0u, ctzll(3)); | |
55 | ASSERT_EQ(2u, ctzll(4)); | |
56 | ASSERT_EQ(8u, ctz(0x100)); | |
57 | ASSERT_EQ(8u, ctzll(0x100)); | |
58 | ASSERT_EQ(0u, ctz(0xffffffff)); | |
59 | ASSERT_EQ(0u, ctzl(0xffffffff)); | |
60 | ASSERT_EQ(0u, ctzll(0xffffffff)); | |
61 | ASSERT_EQ(20u, ctzll(0xffffffff00000)); | |
62 | ASSERT_EQ(48u, ctzll(0xff000000000000ull)); | |
63 | } | |
64 | ||
65 | TEST(intarith, p2family) { | |
66 | ASSERT_TRUE(ISP2(0x100)); | |
67 | ASSERT_FALSE(ISP2(0x1234)); | |
68 | ||
69 | ASSERT_EQ(1024, P2ALIGN(1200, 1024)); | |
70 | ASSERT_EQ(1024, P2ALIGN(1024, 1024)); | |
71 | ASSERT_EQ(0x1200, P2ALIGN(0x1234, 0x100)); | |
72 | ASSERT_EQ(0x5600, P2ALIGN(0x5600, 0x100)); | |
73 | ||
74 | ASSERT_EQ(0x34, P2PHASE(0x1234, 0x100)); | |
75 | ASSERT_EQ(0x00, P2PHASE(0x5600, 0x100)); | |
76 | ||
77 | ASSERT_EQ(0xcc, P2NPHASE(0x1234, 0x100)); | |
78 | ASSERT_EQ(0x00, P2NPHASE(0x5600, 0x100)); | |
79 | ||
80 | ASSERT_EQ(0x1300, P2ROUNDUP(0x1234, 0x100)); | |
81 | ASSERT_EQ(0x5600, P2ROUNDUP(0x5600, 0x100)); | |
82 | } |