llvm/flang/unittests/Evaluate/leading-zero-bit-count.cpp
Luke Ireland ee5fa1f233 [flang] Create a separate directory for unittests
Some of the regression tests are C programs that act as test harnesses
for the compiler internals as opposed to being Fortran inputs to test
the compiler in action. The former style of tests are analog to LLVM's
unittests and will not use the lit framework.

Change-Id: I0ff10e23f66ff843e8fff4c35cfb6559b9dab762

Original-commit: flang-compiler/f18@2bfddbe8f8
Reviewed-on: https://github.com/flang-compiler/f18/pull/1027
Tree-same-pre-rewrite: false
2020-03-13 11:58:11 +00:00

37 lines
1.2 KiB
C++

#include "flang/Common/leading-zero-bit-count.h"
#include "testing.h"
using Fortran::common::LeadingZeroBitCount;
int main() {
MATCH(64, LeadingZeroBitCount(std::uint64_t{0}));
for (int j{0}; j < 64; ++j) {
for (int k{0}; k < j; ++k) {
std::uint64_t x = (std::uint64_t{1} << j) | (std::uint64_t{1} << k);
MATCH(63 - j, LeadingZeroBitCount(x))("j=%d, k=%d", j, k);
}
}
MATCH(32, LeadingZeroBitCount(std::uint32_t{0}));
for (int j{0}; j < 32; ++j) {
for (int k{0}; k < j; ++k) {
std::uint32_t x = (std::uint32_t{1} << j) | (std::uint32_t{1} << k);
MATCH(31 - j, LeadingZeroBitCount(x))("j=%d, k=%d", j, k);
}
}
MATCH(16, LeadingZeroBitCount(std::uint16_t{0}));
for (int j{0}; j < 16; ++j) {
for (int k{0}; k < j; ++k) {
std::uint16_t x = (std::uint16_t{1} << j) | (std::uint16_t{1} << k);
MATCH(15 - j, LeadingZeroBitCount(x))("j=%d, k=%d", j, k);
}
}
MATCH(8, LeadingZeroBitCount(std::uint8_t{0}));
for (int j{0}; j < 8; ++j) {
for (int k{0}; k < j; ++k) {
std::uint8_t x = (std::uint8_t{1} << j) | (std::uint8_t{1} << k);
MATCH(7 - j, LeadingZeroBitCount(x))("j=%d, k=%d", j, k);
}
}
return testing::Complete();
}