Common.cpp 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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. #include <cstdint>
  15. #include <gmock/gmock.h>
  16. #include "glslang/Include/Common.h"
  17. namespace {
  18. TEST(IsPow2, Int_Negative) {
  19. EXPECT_EQ(false, glslang::IsPow2(-5));
  20. EXPECT_EQ(false, glslang::IsPow2(-1));
  21. EXPECT_EQ(false, glslang::IsPow2(INT_MIN));
  22. EXPECT_EQ(false, glslang::IsPow2(int64_t(-10)));
  23. }
  24. TEST(IsPow2, Zero) {
  25. EXPECT_EQ(false, glslang::IsPow2(0));
  26. EXPECT_EQ(false, glslang::IsPow2(0u));
  27. EXPECT_EQ(false, glslang::IsPow2(0));
  28. EXPECT_EQ(false, glslang::IsPow2(uint64_t(0)));
  29. EXPECT_EQ(false, glslang::IsPow2(int64_t(0)));
  30. }
  31. TEST(IsPow2, Int_Positive_PowersOf2) {
  32. EXPECT_EQ(true, glslang::IsPow2(1));
  33. EXPECT_EQ(true, glslang::IsPow2(2));
  34. EXPECT_EQ(true, glslang::IsPow2(4));
  35. EXPECT_EQ(true, glslang::IsPow2(8));
  36. EXPECT_EQ(true, glslang::IsPow2(16));
  37. EXPECT_EQ(true, glslang::IsPow2(32768));
  38. EXPECT_EQ(true, glslang::IsPow2(65536));
  39. EXPECT_EQ(true, glslang::IsPow2(2147483648));
  40. }
  41. TEST(IsPow2, Int_Positive_NonPowersOf2) {
  42. EXPECT_EQ(false, glslang::IsPow2(3));
  43. EXPECT_EQ(false, glslang::IsPow2(5));
  44. EXPECT_EQ(false, glslang::IsPow2(2147483647));
  45. }
  46. TEST(IsPow2, Uint_Positive_PowersOf2) {
  47. EXPECT_EQ(true, glslang::IsPow2(1u));
  48. EXPECT_EQ(true, glslang::IsPow2(2u));
  49. EXPECT_EQ(true, glslang::IsPow2(4u));
  50. EXPECT_EQ(true, glslang::IsPow2(8u));
  51. EXPECT_EQ(true, glslang::IsPow2(16u));
  52. EXPECT_EQ(true, glslang::IsPow2(32768u));
  53. EXPECT_EQ(true, glslang::IsPow2(65536u));
  54. EXPECT_EQ(true, glslang::IsPow2(2147483648u));
  55. }
  56. TEST(IsPow2, Uint_Positive_NonPowersOf2) {
  57. EXPECT_EQ(false, glslang::IsPow2(3u));
  58. EXPECT_EQ(false, glslang::IsPow2(5u));
  59. EXPECT_EQ(false, glslang::IsPow2(2147483647u));
  60. }
  61. TEST(IntLog2, Int) {
  62. EXPECT_EQ(0, glslang::IntLog2(1));
  63. EXPECT_EQ(1, glslang::IntLog2(2));
  64. EXPECT_EQ(2, glslang::IntLog2(4));
  65. EXPECT_EQ(3, glslang::IntLog2(8));
  66. EXPECT_EQ(4, glslang::IntLog2(16));
  67. EXPECT_EQ(5, glslang::IntLog2(32));
  68. EXPECT_EQ(6, glslang::IntLog2(64));
  69. EXPECT_EQ(7, glslang::IntLog2(128));
  70. EXPECT_EQ(8, glslang::IntLog2(256));
  71. EXPECT_EQ(9, glslang::IntLog2(512));
  72. EXPECT_EQ(10, glslang::IntLog2(1024));
  73. EXPECT_EQ(11, glslang::IntLog2(2048));
  74. EXPECT_EQ(12, glslang::IntLog2(0x1000));
  75. EXPECT_EQ(13, glslang::IntLog2(0x2000));
  76. EXPECT_EQ(14, glslang::IntLog2(0x4000));
  77. EXPECT_EQ(15, glslang::IntLog2(0x8000));
  78. EXPECT_EQ(16, glslang::IntLog2(0x10000));
  79. EXPECT_EQ(17, glslang::IntLog2(0x20000));
  80. EXPECT_EQ(18, glslang::IntLog2(0x40000));
  81. EXPECT_EQ(19, glslang::IntLog2(0x80000));
  82. EXPECT_EQ(20, glslang::IntLog2(0x100000));
  83. EXPECT_EQ(21, glslang::IntLog2(0x200000));
  84. EXPECT_EQ(22, glslang::IntLog2(0x400000));
  85. EXPECT_EQ(23, glslang::IntLog2(0x800000));
  86. EXPECT_EQ(24, glslang::IntLog2(0x1000000));
  87. EXPECT_EQ(25, glslang::IntLog2(0x2000000));
  88. EXPECT_EQ(26, glslang::IntLog2(0x4000000));
  89. EXPECT_EQ(27, glslang::IntLog2(0x8000000));
  90. EXPECT_EQ(28, glslang::IntLog2(0x10000000));
  91. EXPECT_EQ(29, glslang::IntLog2(0x20000000));
  92. EXPECT_EQ(30, glslang::IntLog2(0x40000000));
  93. }
  94. TEST(IntLog2, Uint) {
  95. EXPECT_EQ(0, glslang::IntLog2(1u));
  96. EXPECT_EQ(1, glslang::IntLog2(2u));
  97. EXPECT_EQ(2, glslang::IntLog2(4u));
  98. EXPECT_EQ(3, glslang::IntLog2(8u));
  99. EXPECT_EQ(4, glslang::IntLog2(16u));
  100. EXPECT_EQ(5, glslang::IntLog2(32u));
  101. EXPECT_EQ(6, glslang::IntLog2(64u));
  102. EXPECT_EQ(7, glslang::IntLog2(128u));
  103. EXPECT_EQ(8, glslang::IntLog2(256u));
  104. EXPECT_EQ(9, glslang::IntLog2(512u));
  105. EXPECT_EQ(10, glslang::IntLog2(1024u));
  106. EXPECT_EQ(11, glslang::IntLog2(2048u));
  107. EXPECT_EQ(12, glslang::IntLog2(0x1000u));
  108. EXPECT_EQ(13, glslang::IntLog2(0x2000u));
  109. EXPECT_EQ(14, glslang::IntLog2(0x4000u));
  110. EXPECT_EQ(15, glslang::IntLog2(0x8000u));
  111. EXPECT_EQ(16, glslang::IntLog2(0x10000u));
  112. EXPECT_EQ(17, glslang::IntLog2(0x20000u));
  113. EXPECT_EQ(18, glslang::IntLog2(0x40000u));
  114. EXPECT_EQ(19, glslang::IntLog2(0x80000u));
  115. EXPECT_EQ(20, glslang::IntLog2(0x100000u));
  116. EXPECT_EQ(21, glslang::IntLog2(0x200000u));
  117. EXPECT_EQ(22, glslang::IntLog2(0x400000u));
  118. EXPECT_EQ(23, glslang::IntLog2(0x800000u));
  119. EXPECT_EQ(24, glslang::IntLog2(0x1000000u));
  120. EXPECT_EQ(25, glslang::IntLog2(0x2000000u));
  121. EXPECT_EQ(26, glslang::IntLog2(0x4000000u));
  122. EXPECT_EQ(27, glslang::IntLog2(0x8000000u));
  123. EXPECT_EQ(28, glslang::IntLog2(0x10000000u));
  124. EXPECT_EQ(29, glslang::IntLog2(0x20000000u));
  125. EXPECT_EQ(30, glslang::IntLog2(0x40000000u));
  126. EXPECT_EQ(31, glslang::IntLog2(0x80000000u));
  127. }
  128. TEST(IntLog2, Int64) {
  129. EXPECT_EQ(0, glslang::IntLog2(int64_t(1)));
  130. EXPECT_EQ(1, glslang::IntLog2(int64_t(2)));
  131. EXPECT_EQ(2, glslang::IntLog2(int64_t(4)));
  132. EXPECT_EQ(3, glslang::IntLog2(int64_t(8)));
  133. EXPECT_EQ(30, glslang::IntLog2(int64_t(0x40000000u)));
  134. EXPECT_EQ(31, glslang::IntLog2(int64_t(0x80000000u)));
  135. EXPECT_EQ(32, glslang::IntLog2(int64_t(0x10000) * int64_t(0x10000)));
  136. EXPECT_EQ(48, glslang::IntLog2(int64_t(0x10000) * int64_t(0x10000) * int64_t(0x10000)));
  137. EXPECT_EQ(62, glslang::IntLog2(int64_t(0x10000) * int64_t(0x10000) * int64_t(0x10000) * int64_t(0x4000)));
  138. }
  139. TEST(IntLog2, Uint64) {
  140. EXPECT_EQ(0, glslang::IntLog2(uint64_t(1)));
  141. EXPECT_EQ(1, glslang::IntLog2(uint64_t(2)));
  142. EXPECT_EQ(2, glslang::IntLog2(uint64_t(4)));
  143. EXPECT_EQ(3, glslang::IntLog2(uint64_t(8)));
  144. EXPECT_EQ(30, glslang::IntLog2(uint64_t(0x40000000u)));
  145. EXPECT_EQ(31, glslang::IntLog2(uint64_t(0x80000000u)));
  146. EXPECT_EQ(32, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000)));
  147. EXPECT_EQ(48, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x10000)));
  148. EXPECT_EQ(62, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x4000)));
  149. EXPECT_EQ(63, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x8000)));
  150. }
  151. } // anonymous namespace