1617a3babSopenharmony_ci// Copyright (c) 2021 Google LLC 2617a3babSopenharmony_ci// 3617a3babSopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 4617a3babSopenharmony_ci// you may not use this file except in compliance with the License. 5617a3babSopenharmony_ci// You may obtain a copy of the License at 6617a3babSopenharmony_ci// 7617a3babSopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 8617a3babSopenharmony_ci// 9617a3babSopenharmony_ci// Unless required by applicable law or agreed to in writing, software 10617a3babSopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS, 11617a3babSopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12617a3babSopenharmony_ci// See the License for the specific language governing permissions and 13617a3babSopenharmony_ci// limitations under the License. 14617a3babSopenharmony_ci 15617a3babSopenharmony_ci#include <cstdint> 16617a3babSopenharmony_ci 17617a3babSopenharmony_ci#include <gmock/gmock.h> 18617a3babSopenharmony_ci#include "glslang/Include/Common.h" 19617a3babSopenharmony_ci 20617a3babSopenharmony_cinamespace { 21617a3babSopenharmony_ci 22617a3babSopenharmony_ciTEST(IsPow2, Int_Negative) { 23617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(-5)); 24617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(-1)); 25617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(INT_MIN)); 26617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(int64_t(-10))); 27617a3babSopenharmony_ci} 28617a3babSopenharmony_ci 29617a3babSopenharmony_ciTEST(IsPow2, Zero) { 30617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(0)); 31617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(0u)); 32617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(0)); 33617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(uint64_t(0))); 34617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(int64_t(0))); 35617a3babSopenharmony_ci} 36617a3babSopenharmony_ci 37617a3babSopenharmony_ciTEST(IsPow2, Int_Positive_PowersOf2) { 38617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(1)); 39617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(2)); 40617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(4)); 41617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(8)); 42617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(16)); 43617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(32768)); 44617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(65536)); 45617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(2147483648)); 46617a3babSopenharmony_ci} 47617a3babSopenharmony_ci 48617a3babSopenharmony_ciTEST(IsPow2, Int_Positive_NonPowersOf2) { 49617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(3)); 50617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(5)); 51617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(2147483647)); 52617a3babSopenharmony_ci} 53617a3babSopenharmony_ci 54617a3babSopenharmony_ciTEST(IsPow2, Uint_Positive_PowersOf2) { 55617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(1u)); 56617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(2u)); 57617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(4u)); 58617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(8u)); 59617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(16u)); 60617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(32768u)); 61617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(65536u)); 62617a3babSopenharmony_ci EXPECT_EQ(true, glslang::IsPow2(2147483648u)); 63617a3babSopenharmony_ci} 64617a3babSopenharmony_ci 65617a3babSopenharmony_ciTEST(IsPow2, Uint_Positive_NonPowersOf2) { 66617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(3u)); 67617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(5u)); 68617a3babSopenharmony_ci EXPECT_EQ(false, glslang::IsPow2(2147483647u)); 69617a3babSopenharmony_ci} 70617a3babSopenharmony_ci 71617a3babSopenharmony_ciTEST(IntLog2, Int) { 72617a3babSopenharmony_ci EXPECT_EQ(0, glslang::IntLog2(1)); 73617a3babSopenharmony_ci EXPECT_EQ(1, glslang::IntLog2(2)); 74617a3babSopenharmony_ci EXPECT_EQ(2, glslang::IntLog2(4)); 75617a3babSopenharmony_ci EXPECT_EQ(3, glslang::IntLog2(8)); 76617a3babSopenharmony_ci EXPECT_EQ(4, glslang::IntLog2(16)); 77617a3babSopenharmony_ci EXPECT_EQ(5, glslang::IntLog2(32)); 78617a3babSopenharmony_ci EXPECT_EQ(6, glslang::IntLog2(64)); 79617a3babSopenharmony_ci EXPECT_EQ(7, glslang::IntLog2(128)); 80617a3babSopenharmony_ci EXPECT_EQ(8, glslang::IntLog2(256)); 81617a3babSopenharmony_ci EXPECT_EQ(9, glslang::IntLog2(512)); 82617a3babSopenharmony_ci EXPECT_EQ(10, glslang::IntLog2(1024)); 83617a3babSopenharmony_ci EXPECT_EQ(11, glslang::IntLog2(2048)); 84617a3babSopenharmony_ci EXPECT_EQ(12, glslang::IntLog2(0x1000)); 85617a3babSopenharmony_ci EXPECT_EQ(13, glslang::IntLog2(0x2000)); 86617a3babSopenharmony_ci EXPECT_EQ(14, glslang::IntLog2(0x4000)); 87617a3babSopenharmony_ci EXPECT_EQ(15, glslang::IntLog2(0x8000)); 88617a3babSopenharmony_ci EXPECT_EQ(16, glslang::IntLog2(0x10000)); 89617a3babSopenharmony_ci EXPECT_EQ(17, glslang::IntLog2(0x20000)); 90617a3babSopenharmony_ci EXPECT_EQ(18, glslang::IntLog2(0x40000)); 91617a3babSopenharmony_ci EXPECT_EQ(19, glslang::IntLog2(0x80000)); 92617a3babSopenharmony_ci EXPECT_EQ(20, glslang::IntLog2(0x100000)); 93617a3babSopenharmony_ci EXPECT_EQ(21, glslang::IntLog2(0x200000)); 94617a3babSopenharmony_ci EXPECT_EQ(22, glslang::IntLog2(0x400000)); 95617a3babSopenharmony_ci EXPECT_EQ(23, glslang::IntLog2(0x800000)); 96617a3babSopenharmony_ci EXPECT_EQ(24, glslang::IntLog2(0x1000000)); 97617a3babSopenharmony_ci EXPECT_EQ(25, glslang::IntLog2(0x2000000)); 98617a3babSopenharmony_ci EXPECT_EQ(26, glslang::IntLog2(0x4000000)); 99617a3babSopenharmony_ci EXPECT_EQ(27, glslang::IntLog2(0x8000000)); 100617a3babSopenharmony_ci EXPECT_EQ(28, glslang::IntLog2(0x10000000)); 101617a3babSopenharmony_ci EXPECT_EQ(29, glslang::IntLog2(0x20000000)); 102617a3babSopenharmony_ci EXPECT_EQ(30, glslang::IntLog2(0x40000000)); 103617a3babSopenharmony_ci} 104617a3babSopenharmony_ci 105617a3babSopenharmony_ciTEST(IntLog2, Uint) { 106617a3babSopenharmony_ci EXPECT_EQ(0, glslang::IntLog2(1u)); 107617a3babSopenharmony_ci EXPECT_EQ(1, glslang::IntLog2(2u)); 108617a3babSopenharmony_ci EXPECT_EQ(2, glslang::IntLog2(4u)); 109617a3babSopenharmony_ci EXPECT_EQ(3, glslang::IntLog2(8u)); 110617a3babSopenharmony_ci EXPECT_EQ(4, glslang::IntLog2(16u)); 111617a3babSopenharmony_ci EXPECT_EQ(5, glslang::IntLog2(32u)); 112617a3babSopenharmony_ci EXPECT_EQ(6, glslang::IntLog2(64u)); 113617a3babSopenharmony_ci EXPECT_EQ(7, glslang::IntLog2(128u)); 114617a3babSopenharmony_ci EXPECT_EQ(8, glslang::IntLog2(256u)); 115617a3babSopenharmony_ci EXPECT_EQ(9, glslang::IntLog2(512u)); 116617a3babSopenharmony_ci EXPECT_EQ(10, glslang::IntLog2(1024u)); 117617a3babSopenharmony_ci EXPECT_EQ(11, glslang::IntLog2(2048u)); 118617a3babSopenharmony_ci EXPECT_EQ(12, glslang::IntLog2(0x1000u)); 119617a3babSopenharmony_ci EXPECT_EQ(13, glslang::IntLog2(0x2000u)); 120617a3babSopenharmony_ci EXPECT_EQ(14, glslang::IntLog2(0x4000u)); 121617a3babSopenharmony_ci EXPECT_EQ(15, glslang::IntLog2(0x8000u)); 122617a3babSopenharmony_ci EXPECT_EQ(16, glslang::IntLog2(0x10000u)); 123617a3babSopenharmony_ci EXPECT_EQ(17, glslang::IntLog2(0x20000u)); 124617a3babSopenharmony_ci EXPECT_EQ(18, glslang::IntLog2(0x40000u)); 125617a3babSopenharmony_ci EXPECT_EQ(19, glslang::IntLog2(0x80000u)); 126617a3babSopenharmony_ci EXPECT_EQ(20, glslang::IntLog2(0x100000u)); 127617a3babSopenharmony_ci EXPECT_EQ(21, glslang::IntLog2(0x200000u)); 128617a3babSopenharmony_ci EXPECT_EQ(22, glslang::IntLog2(0x400000u)); 129617a3babSopenharmony_ci EXPECT_EQ(23, glslang::IntLog2(0x800000u)); 130617a3babSopenharmony_ci EXPECT_EQ(24, glslang::IntLog2(0x1000000u)); 131617a3babSopenharmony_ci EXPECT_EQ(25, glslang::IntLog2(0x2000000u)); 132617a3babSopenharmony_ci EXPECT_EQ(26, glslang::IntLog2(0x4000000u)); 133617a3babSopenharmony_ci EXPECT_EQ(27, glslang::IntLog2(0x8000000u)); 134617a3babSopenharmony_ci EXPECT_EQ(28, glslang::IntLog2(0x10000000u)); 135617a3babSopenharmony_ci EXPECT_EQ(29, glslang::IntLog2(0x20000000u)); 136617a3babSopenharmony_ci EXPECT_EQ(30, glslang::IntLog2(0x40000000u)); 137617a3babSopenharmony_ci EXPECT_EQ(31, glslang::IntLog2(0x80000000u)); 138617a3babSopenharmony_ci} 139617a3babSopenharmony_ci 140617a3babSopenharmony_ciTEST(IntLog2, Int64) { 141617a3babSopenharmony_ci EXPECT_EQ(0, glslang::IntLog2(int64_t(1))); 142617a3babSopenharmony_ci EXPECT_EQ(1, glslang::IntLog2(int64_t(2))); 143617a3babSopenharmony_ci EXPECT_EQ(2, glslang::IntLog2(int64_t(4))); 144617a3babSopenharmony_ci EXPECT_EQ(3, glslang::IntLog2(int64_t(8))); 145617a3babSopenharmony_ci EXPECT_EQ(30, glslang::IntLog2(int64_t(0x40000000u))); 146617a3babSopenharmony_ci EXPECT_EQ(31, glslang::IntLog2(int64_t(0x80000000u))); 147617a3babSopenharmony_ci EXPECT_EQ(32, glslang::IntLog2(int64_t(0x10000) * int64_t(0x10000))); 148617a3babSopenharmony_ci EXPECT_EQ(48, glslang::IntLog2(int64_t(0x10000) * int64_t(0x10000) * int64_t(0x10000))); 149617a3babSopenharmony_ci EXPECT_EQ(62, glslang::IntLog2(int64_t(0x10000) * int64_t(0x10000) * int64_t(0x10000) * int64_t(0x4000))); 150617a3babSopenharmony_ci} 151617a3babSopenharmony_ci 152617a3babSopenharmony_ciTEST(IntLog2, Uint64) { 153617a3babSopenharmony_ci EXPECT_EQ(0, glslang::IntLog2(uint64_t(1))); 154617a3babSopenharmony_ci EXPECT_EQ(1, glslang::IntLog2(uint64_t(2))); 155617a3babSopenharmony_ci EXPECT_EQ(2, glslang::IntLog2(uint64_t(4))); 156617a3babSopenharmony_ci EXPECT_EQ(3, glslang::IntLog2(uint64_t(8))); 157617a3babSopenharmony_ci EXPECT_EQ(30, glslang::IntLog2(uint64_t(0x40000000u))); 158617a3babSopenharmony_ci EXPECT_EQ(31, glslang::IntLog2(uint64_t(0x80000000u))); 159617a3babSopenharmony_ci EXPECT_EQ(32, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000))); 160617a3babSopenharmony_ci EXPECT_EQ(48, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x10000))); 161617a3babSopenharmony_ci EXPECT_EQ(62, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x4000))); 162617a3babSopenharmony_ci EXPECT_EQ(63, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x8000))); 163617a3babSopenharmony_ci} 164617a3babSopenharmony_ci 165617a3babSopenharmony_ci} // anonymous namespace 166