Mercurial > hg > CbC > CbC_llvm
view libc/benchmarks/LibcMemoryBenchmarkTest.cpp @ 207:2e18cbf3894f
LLVM12
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Jun 2021 06:07:14 +0900 |
parents | |
children | 1f2b6ac9f198 |
line wrap: on
line source
//===-- Benchmark Memory Test ---------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "LibcMemoryBenchmark.h" #include "llvm/Support/Alignment.h" #include "gmock/gmock.h" #include "gtest/gtest.h" using testing::AllOf; using testing::AnyOf; using testing::ElementsAre; using testing::Ge; using testing::Gt; using testing::Le; using testing::Lt; namespace llvm { namespace libc_benchmarks { namespace { TEST(AlignedBuffer, IsAligned) { AlignedBuffer AB(0); EXPECT_TRUE(isAddrAligned(Align(AlignedBuffer::Alignment), AB.begin())); } TEST(AlignedBuffer, Empty) { AlignedBuffer AB(0); EXPECT_EQ(std::distance(AB.begin(), AB.end()), 0U); } TEST(OffsetDistribution, AlignToBegin) { const size_t BufferSize = 8192; OffsetDistribution OD(BufferSize, 1024, None); std::default_random_engine Gen; for (size_t I = 0; I <= 10; ++I) EXPECT_EQ(OD(Gen), 0U); } TEST(OffsetDistribution, NoAlignment) { const size_t BufferSize = 8192; OffsetDistribution OD(BufferSize, 1, Align(1)); std::default_random_engine Gen; for (size_t I = 0; I <= 10; ++I) EXPECT_THAT(OD(Gen), AllOf(Ge(0U), Lt(8192U))); } MATCHER_P(IsDivisibleBy, n, "") { *result_listener << "where the remainder is " << (arg % n); return (arg % n) == 0; } TEST(OffsetDistribution, Aligned) { const size_t BufferSize = 8192; OffsetDistribution OD(BufferSize, 1, Align(16)); std::default_random_engine Gen; for (size_t I = 0; I <= 10; ++I) EXPECT_THAT(OD(Gen), AllOf(Ge(0U), Lt(8192U), IsDivisibleBy(16U))); } TEST(MismatchOffsetDistribution, EqualBufferDisablesDistribution) { const size_t BufferSize = 8192; const uint32_t MismatchAt = 0; // buffer are equal. MismatchOffsetDistribution MOD(BufferSize, 1024, MismatchAt); EXPECT_FALSE(MOD); } TEST(MismatchOffsetDistribution, DifferentBufferDisablesDistribution) { const size_t BufferSize = 8192; const uint32_t MismatchAt = 1; // buffer are different. MismatchOffsetDistribution MOD(BufferSize, 1024, MismatchAt); EXPECT_FALSE(MOD); } TEST(MismatchOffsetDistribution, MismatchAt2) { const size_t BufferSize = 16; const uint32_t MismatchAt = 2; // buffer are different at position 2. const uint32_t MaxSize = 4; MismatchOffsetDistribution MOD(BufferSize, MaxSize, MismatchAt); EXPECT_TRUE(MOD); // We test equality up to MaxSize (=4) so we need spans of 4 equal bytes // spaced by one mismatch. EXPECT_THAT(MOD.getMismatchIndices(), ElementsAre(5, 9, 13)); std::default_random_engine Gen; for (size_t Iterations = 0; Iterations <= 10; ++Iterations) { for (size_t Size = 0; Size <= MaxSize; ++Size) { if (Size >= MismatchAt) EXPECT_THAT(MOD(Gen, Size), AnyOf(5 - MismatchAt, 9 - MismatchAt, 13 - MismatchAt)); else EXPECT_THAT(MOD(Gen, Size), AnyOf(5 - Size - 1, 9 - Size - 1, 13 - Size - 1)); } } } } // namespace } // namespace libc_benchmarks } // namespace llvm