xref: /third_party/glslang/gtests/Common.cpp (revision 617a3bab)
1// Copyright (c) 2021 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#include <cstdint>
16
17#include <gmock/gmock.h>
18#include "glslang/Include/Common.h"
19
20namespace {
21
22TEST(IsPow2, Int_Negative) {
23  EXPECT_EQ(false, glslang::IsPow2(-5));
24  EXPECT_EQ(false, glslang::IsPow2(-1));
25  EXPECT_EQ(false, glslang::IsPow2(INT_MIN));
26  EXPECT_EQ(false, glslang::IsPow2(int64_t(-10)));
27}
28
29TEST(IsPow2, Zero) {
30  EXPECT_EQ(false, glslang::IsPow2(0));
31  EXPECT_EQ(false, glslang::IsPow2(0u));
32  EXPECT_EQ(false, glslang::IsPow2(0));
33  EXPECT_EQ(false, glslang::IsPow2(uint64_t(0)));
34  EXPECT_EQ(false, glslang::IsPow2(int64_t(0)));
35}
36
37TEST(IsPow2, Int_Positive_PowersOf2) {
38  EXPECT_EQ(true, glslang::IsPow2(1));
39  EXPECT_EQ(true, glslang::IsPow2(2));
40  EXPECT_EQ(true, glslang::IsPow2(4));
41  EXPECT_EQ(true, glslang::IsPow2(8));
42  EXPECT_EQ(true, glslang::IsPow2(16));
43  EXPECT_EQ(true, glslang::IsPow2(32768));
44  EXPECT_EQ(true, glslang::IsPow2(65536));
45  EXPECT_EQ(true, glslang::IsPow2(2147483648));
46}
47
48TEST(IsPow2, Int_Positive_NonPowersOf2) {
49  EXPECT_EQ(false, glslang::IsPow2(3));
50  EXPECT_EQ(false, glslang::IsPow2(5));
51  EXPECT_EQ(false, glslang::IsPow2(2147483647));
52}
53
54TEST(IsPow2, Uint_Positive_PowersOf2) {
55  EXPECT_EQ(true, glslang::IsPow2(1u));
56  EXPECT_EQ(true, glslang::IsPow2(2u));
57  EXPECT_EQ(true, glslang::IsPow2(4u));
58  EXPECT_EQ(true, glslang::IsPow2(8u));
59  EXPECT_EQ(true, glslang::IsPow2(16u));
60  EXPECT_EQ(true, glslang::IsPow2(32768u));
61  EXPECT_EQ(true, glslang::IsPow2(65536u));
62  EXPECT_EQ(true, glslang::IsPow2(2147483648u));
63}
64
65TEST(IsPow2, Uint_Positive_NonPowersOf2) {
66  EXPECT_EQ(false, glslang::IsPow2(3u));
67  EXPECT_EQ(false, glslang::IsPow2(5u));
68  EXPECT_EQ(false, glslang::IsPow2(2147483647u));
69}
70
71TEST(IntLog2, Int) {
72  EXPECT_EQ(0, glslang::IntLog2(1));
73  EXPECT_EQ(1, glslang::IntLog2(2));
74  EXPECT_EQ(2, glslang::IntLog2(4));
75  EXPECT_EQ(3, glslang::IntLog2(8));
76  EXPECT_EQ(4, glslang::IntLog2(16));
77  EXPECT_EQ(5, glslang::IntLog2(32));
78  EXPECT_EQ(6, glslang::IntLog2(64));
79  EXPECT_EQ(7, glslang::IntLog2(128));
80  EXPECT_EQ(8, glslang::IntLog2(256));
81  EXPECT_EQ(9, glslang::IntLog2(512));
82  EXPECT_EQ(10, glslang::IntLog2(1024));
83  EXPECT_EQ(11, glslang::IntLog2(2048));
84  EXPECT_EQ(12, glslang::IntLog2(0x1000));
85  EXPECT_EQ(13, glslang::IntLog2(0x2000));
86  EXPECT_EQ(14, glslang::IntLog2(0x4000));
87  EXPECT_EQ(15, glslang::IntLog2(0x8000));
88  EXPECT_EQ(16, glslang::IntLog2(0x10000));
89  EXPECT_EQ(17, glslang::IntLog2(0x20000));
90  EXPECT_EQ(18, glslang::IntLog2(0x40000));
91  EXPECT_EQ(19, glslang::IntLog2(0x80000));
92  EXPECT_EQ(20, glslang::IntLog2(0x100000));
93  EXPECT_EQ(21, glslang::IntLog2(0x200000));
94  EXPECT_EQ(22, glslang::IntLog2(0x400000));
95  EXPECT_EQ(23, glslang::IntLog2(0x800000));
96  EXPECT_EQ(24, glslang::IntLog2(0x1000000));
97  EXPECT_EQ(25, glslang::IntLog2(0x2000000));
98  EXPECT_EQ(26, glslang::IntLog2(0x4000000));
99  EXPECT_EQ(27, glslang::IntLog2(0x8000000));
100  EXPECT_EQ(28, glslang::IntLog2(0x10000000));
101  EXPECT_EQ(29, glslang::IntLog2(0x20000000));
102  EXPECT_EQ(30, glslang::IntLog2(0x40000000));
103}
104
105TEST(IntLog2, Uint) {
106  EXPECT_EQ(0, glslang::IntLog2(1u));
107  EXPECT_EQ(1, glslang::IntLog2(2u));
108  EXPECT_EQ(2, glslang::IntLog2(4u));
109  EXPECT_EQ(3, glslang::IntLog2(8u));
110  EXPECT_EQ(4, glslang::IntLog2(16u));
111  EXPECT_EQ(5, glslang::IntLog2(32u));
112  EXPECT_EQ(6, glslang::IntLog2(64u));
113  EXPECT_EQ(7, glslang::IntLog2(128u));
114  EXPECT_EQ(8, glslang::IntLog2(256u));
115  EXPECT_EQ(9, glslang::IntLog2(512u));
116  EXPECT_EQ(10, glslang::IntLog2(1024u));
117  EXPECT_EQ(11, glslang::IntLog2(2048u));
118  EXPECT_EQ(12, glslang::IntLog2(0x1000u));
119  EXPECT_EQ(13, glslang::IntLog2(0x2000u));
120  EXPECT_EQ(14, glslang::IntLog2(0x4000u));
121  EXPECT_EQ(15, glslang::IntLog2(0x8000u));
122  EXPECT_EQ(16, glslang::IntLog2(0x10000u));
123  EXPECT_EQ(17, glslang::IntLog2(0x20000u));
124  EXPECT_EQ(18, glslang::IntLog2(0x40000u));
125  EXPECT_EQ(19, glslang::IntLog2(0x80000u));
126  EXPECT_EQ(20, glslang::IntLog2(0x100000u));
127  EXPECT_EQ(21, glslang::IntLog2(0x200000u));
128  EXPECT_EQ(22, glslang::IntLog2(0x400000u));
129  EXPECT_EQ(23, glslang::IntLog2(0x800000u));
130  EXPECT_EQ(24, glslang::IntLog2(0x1000000u));
131  EXPECT_EQ(25, glslang::IntLog2(0x2000000u));
132  EXPECT_EQ(26, glslang::IntLog2(0x4000000u));
133  EXPECT_EQ(27, glslang::IntLog2(0x8000000u));
134  EXPECT_EQ(28, glslang::IntLog2(0x10000000u));
135  EXPECT_EQ(29, glslang::IntLog2(0x20000000u));
136  EXPECT_EQ(30, glslang::IntLog2(0x40000000u));
137  EXPECT_EQ(31, glslang::IntLog2(0x80000000u));
138}
139
140TEST(IntLog2, Int64) {
141  EXPECT_EQ(0, glslang::IntLog2(int64_t(1)));
142  EXPECT_EQ(1, glslang::IntLog2(int64_t(2)));
143  EXPECT_EQ(2, glslang::IntLog2(int64_t(4)));
144  EXPECT_EQ(3, glslang::IntLog2(int64_t(8)));
145  EXPECT_EQ(30, glslang::IntLog2(int64_t(0x40000000u)));
146  EXPECT_EQ(31, glslang::IntLog2(int64_t(0x80000000u)));
147  EXPECT_EQ(32, glslang::IntLog2(int64_t(0x10000) * int64_t(0x10000)));
148  EXPECT_EQ(48, glslang::IntLog2(int64_t(0x10000) * int64_t(0x10000) * int64_t(0x10000)));
149  EXPECT_EQ(62, glslang::IntLog2(int64_t(0x10000) * int64_t(0x10000) * int64_t(0x10000) * int64_t(0x4000)));
150}
151
152TEST(IntLog2, Uint64) {
153  EXPECT_EQ(0, glslang::IntLog2(uint64_t(1)));
154  EXPECT_EQ(1, glslang::IntLog2(uint64_t(2)));
155  EXPECT_EQ(2, glslang::IntLog2(uint64_t(4)));
156  EXPECT_EQ(3, glslang::IntLog2(uint64_t(8)));
157  EXPECT_EQ(30, glslang::IntLog2(uint64_t(0x40000000u)));
158  EXPECT_EQ(31, glslang::IntLog2(uint64_t(0x80000000u)));
159  EXPECT_EQ(32, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000)));
160  EXPECT_EQ(48, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x10000)));
161  EXPECT_EQ(62, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x4000)));
162  EXPECT_EQ(63, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x8000)));
163}
164
165}  // anonymous namespace
166