Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / 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 }