1 /*
2 * Copyright (C) 2019-2021 Intel Corporation
3 *
4 * SPDX-License-Identifier: MIT
5 *
6 */
7
8 #include "shared/source/helpers/bit_helpers.h"
9
10 #include "gtest/gtest.h"
11
12 using namespace NEO;
13
TEST(IsBitSetTests,givenDifferentValuesWhenTestingIsBitSetThenCorrectValueIsReturned)14 TEST(IsBitSetTests, givenDifferentValuesWhenTestingIsBitSetThenCorrectValueIsReturned) {
15 size_t field1 = 0;
16 size_t field2 = 0b1;
17 size_t field3 = 0b1000;
18 size_t field4 = 0b1010;
19
20 EXPECT_FALSE(isBitSet(field1, 0));
21 EXPECT_FALSE(isBitSet(field1, 1));
22 EXPECT_FALSE(isBitSet(field1, 2));
23 EXPECT_FALSE(isBitSet(field1, 3));
24
25 EXPECT_TRUE(isBitSet(field2, 0));
26 EXPECT_FALSE(isBitSet(field2, 1));
27 EXPECT_FALSE(isBitSet(field2, 2));
28 EXPECT_FALSE(isBitSet(field2, 3));
29
30 EXPECT_FALSE(isBitSet(field3, 0));
31 EXPECT_FALSE(isBitSet(field3, 1));
32 EXPECT_FALSE(isBitSet(field3, 2));
33 EXPECT_TRUE(isBitSet(field3, 3));
34
35 EXPECT_FALSE(isBitSet(field4, 0));
36 EXPECT_TRUE(isBitSet(field4, 1));
37 EXPECT_FALSE(isBitSet(field4, 2));
38 EXPECT_TRUE(isBitSet(field4, 3));
39 }
40
TEST(IsAnyBitSetTests,givenDifferentValuesWhenTestingIsAnyBitSetThenCorrectValueIsReturned)41 TEST(IsAnyBitSetTests, givenDifferentValuesWhenTestingIsAnyBitSetThenCorrectValueIsReturned) {
42 EXPECT_FALSE(isAnyBitSet(0, 0));
43 EXPECT_FALSE(isAnyBitSet(0, 0b1));
44 EXPECT_FALSE(isAnyBitSet(0, 0b10));
45 EXPECT_FALSE(isAnyBitSet(0, 0b1000));
46 EXPECT_FALSE(isAnyBitSet(0, 0b1010));
47 EXPECT_FALSE(isAnyBitSet(0, 0b1111));
48
49 EXPECT_FALSE(isAnyBitSet(0b1, 0));
50 EXPECT_TRUE(isAnyBitSet(0b1, 0b1));
51 EXPECT_FALSE(isAnyBitSet(0b1, 0b10));
52 EXPECT_FALSE(isAnyBitSet(0b1, 0b1000));
53 EXPECT_FALSE(isAnyBitSet(0b1, 0b1010));
54 EXPECT_TRUE(isAnyBitSet(0b1, 0b1111));
55
56 EXPECT_FALSE(isAnyBitSet(0b10, 0));
57 EXPECT_FALSE(isAnyBitSet(0b10, 0b1));
58 EXPECT_TRUE(isAnyBitSet(0b10, 0b10));
59 EXPECT_FALSE(isAnyBitSet(0b10, 0b1000));
60 EXPECT_TRUE(isAnyBitSet(0b10, 0b1010));
61 EXPECT_TRUE(isAnyBitSet(0b10, 0b1111));
62
63 EXPECT_FALSE(isAnyBitSet(0b1000, 0));
64 EXPECT_FALSE(isAnyBitSet(0b1000, 0b1));
65 EXPECT_FALSE(isAnyBitSet(0b1000, 0b10));
66 EXPECT_TRUE(isAnyBitSet(0b1000, 0b1000));
67 EXPECT_TRUE(isAnyBitSet(0b1000, 0b1010));
68 EXPECT_TRUE(isAnyBitSet(0b1000, 0b1111));
69
70 EXPECT_FALSE(isAnyBitSet(0b1010, 0));
71 EXPECT_FALSE(isAnyBitSet(0b1010, 0b1));
72 EXPECT_TRUE(isAnyBitSet(0b1010, 0b10));
73 EXPECT_TRUE(isAnyBitSet(0b1010, 0b1000));
74 EXPECT_TRUE(isAnyBitSet(0b1010, 0b1010));
75 EXPECT_TRUE(isAnyBitSet(0b1010, 0b1111));
76
77 EXPECT_FALSE(isAnyBitSet(0b1111, 0));
78 EXPECT_TRUE(isAnyBitSet(0b1111, 0b1));
79 EXPECT_TRUE(isAnyBitSet(0b1111, 0b10));
80 EXPECT_TRUE(isAnyBitSet(0b1111, 0b1000));
81 EXPECT_TRUE(isAnyBitSet(0b1111, 0b1010));
82 EXPECT_TRUE(isAnyBitSet(0b1111, 0b1111));
83 }
84
TEST(IsValueSetTests,givenDifferentValuesWhenTestingIsValueSetThenCorrectValueIsReturned)85 TEST(IsValueSetTests, givenDifferentValuesWhenTestingIsValueSetThenCorrectValueIsReturned) {
86 size_t field1 = 0;
87 size_t field2 = 0b1;
88 size_t field3 = 0b10;
89 size_t field4 = 0b1000;
90 size_t field5 = 0b1010;
91 size_t field6 = 0b1111;
92
93 EXPECT_FALSE(isValueSet(field1, field2));
94 EXPECT_FALSE(isValueSet(field1, field3));
95 EXPECT_FALSE(isValueSet(field1, field4));
96 EXPECT_FALSE(isValueSet(field1, field5));
97 EXPECT_FALSE(isValueSet(field1, field6));
98
99 EXPECT_TRUE(isValueSet(field2, field2));
100 EXPECT_FALSE(isValueSet(field2, field3));
101 EXPECT_FALSE(isValueSet(field2, field4));
102 EXPECT_FALSE(isValueSet(field2, field5));
103 EXPECT_FALSE(isValueSet(field2, field6));
104
105 EXPECT_FALSE(isValueSet(field3, field2));
106 EXPECT_TRUE(isValueSet(field3, field3));
107 EXPECT_FALSE(isValueSet(field3, field4));
108 EXPECT_FALSE(isValueSet(field3, field5));
109 EXPECT_FALSE(isValueSet(field3, field6));
110
111 EXPECT_FALSE(isValueSet(field4, field2));
112 EXPECT_FALSE(isValueSet(field4, field3));
113 EXPECT_TRUE(isValueSet(field4, field4));
114 EXPECT_FALSE(isValueSet(field4, field5));
115 EXPECT_FALSE(isValueSet(field4, field6));
116
117 EXPECT_FALSE(isValueSet(field5, field2));
118 EXPECT_TRUE(isValueSet(field5, field3));
119 EXPECT_TRUE(isValueSet(field5, field4));
120 EXPECT_TRUE(isValueSet(field5, field5));
121 EXPECT_FALSE(isValueSet(field5, field6));
122
123 EXPECT_TRUE(isValueSet(field6, field2));
124 EXPECT_TRUE(isValueSet(field6, field3));
125 EXPECT_TRUE(isValueSet(field6, field4));
126 EXPECT_TRUE(isValueSet(field6, field5));
127 EXPECT_TRUE(isValueSet(field6, field6));
128 }
129
TEST(IsFieldValidTests,givenDifferentValuesWhenTestingIsFieldValidThenCorrectValueIsReturned)130 TEST(IsFieldValidTests, givenDifferentValuesWhenTestingIsFieldValidThenCorrectValueIsReturned) {
131 size_t field1 = 0;
132 size_t field2 = 0b1;
133 size_t field3 = 0b10;
134 size_t field4 = 0b1000;
135 size_t field5 = 0b1010;
136 size_t field6 = 0b1111;
137
138 EXPECT_TRUE(isFieldValid(field1, field1));
139 EXPECT_TRUE(isFieldValid(field1, field2));
140 EXPECT_TRUE(isFieldValid(field1, field3));
141 EXPECT_TRUE(isFieldValid(field1, field4));
142 EXPECT_TRUE(isFieldValid(field1, field5));
143 EXPECT_TRUE(isFieldValid(field1, field6));
144
145 EXPECT_FALSE(isFieldValid(field2, field1));
146 EXPECT_TRUE(isFieldValid(field2, field2));
147 EXPECT_FALSE(isFieldValid(field2, field3));
148 EXPECT_FALSE(isFieldValid(field2, field4));
149 EXPECT_FALSE(isFieldValid(field2, field5));
150 EXPECT_TRUE(isFieldValid(field2, field6));
151
152 EXPECT_FALSE(isFieldValid(field3, field1));
153 EXPECT_FALSE(isFieldValid(field3, field2));
154 EXPECT_TRUE(isFieldValid(field3, field3));
155 EXPECT_FALSE(isFieldValid(field3, field4));
156 EXPECT_TRUE(isFieldValid(field3, field5));
157 EXPECT_TRUE(isFieldValid(field3, field6));
158
159 EXPECT_FALSE(isFieldValid(field4, field1));
160 EXPECT_FALSE(isFieldValid(field4, field2));
161 EXPECT_FALSE(isFieldValid(field4, field3));
162 EXPECT_TRUE(isFieldValid(field4, field4));
163 EXPECT_TRUE(isFieldValid(field4, field5));
164 EXPECT_TRUE(isFieldValid(field4, field6));
165
166 EXPECT_FALSE(isFieldValid(field5, field1));
167 EXPECT_FALSE(isFieldValid(field5, field2));
168 EXPECT_FALSE(isFieldValid(field5, field3));
169 EXPECT_FALSE(isFieldValid(field5, field4));
170 EXPECT_TRUE(isFieldValid(field5, field5));
171 EXPECT_TRUE(isFieldValid(field5, field6));
172
173 EXPECT_FALSE(isFieldValid(field6, field1));
174 EXPECT_FALSE(isFieldValid(field6, field2));
175 EXPECT_FALSE(isFieldValid(field6, field3));
176 EXPECT_FALSE(isFieldValid(field6, field4));
177 EXPECT_FALSE(isFieldValid(field6, field5));
178 EXPECT_TRUE(isFieldValid(field6, field6));
179 }
180
TEST(SetBitsTests,givenDifferentValuesWhenTestingSetBitsThenCorrectValueIsReturned)181 TEST(SetBitsTests, givenDifferentValuesWhenTestingSetBitsThenCorrectValueIsReturned) {
182 EXPECT_EQ(0b0u, setBits(0b0, false, 0b0));
183 EXPECT_EQ(0b0u, setBits(0b0, false, 0b1));
184 EXPECT_EQ(0b1u, setBits(0b1, false, 0b0));
185 EXPECT_EQ(0b0u, setBits(0b1, false, 0b1));
186
187 EXPECT_EQ(0b0u, setBits(0b0, true, 0b0));
188 EXPECT_EQ(0b1u, setBits(0b0, true, 0b1));
189 EXPECT_EQ(0b1u, setBits(0b1, true, 0b0));
190 EXPECT_EQ(0b1u, setBits(0b1, true, 0b1));
191
192 EXPECT_EQ(0b1010u, setBits(0b1010, false, 0b101));
193 EXPECT_EQ(0b1111u, setBits(0b1010, true, 0b101));
194 EXPECT_EQ(0b101u, setBits(0b101, false, 0b1010));
195 EXPECT_EQ(0b1111u, setBits(0b101, true, 0b1010));
196
197 EXPECT_EQ(0b0u, setBits(0b1010, false, 0b1010));
198 EXPECT_EQ(0b1010u, setBits(0b1010, true, 0b1010));
199 }
200