]> git.proxmox.com Git - ceph.git/blob - ceph/src/test/test_intarith.cc
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / test / test_intarith.cc
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 }