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