brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · a978ce4 Raw
122 lines · cpp
1//===- llvm/unittest/ADT/EnumeratedArrayTest.cpp ----------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// EnumeratedArray unit tests.10//11//===----------------------------------------------------------------------===//12 13#include "llvm/ADT/EnumeratedArray.h"14#include "llvm/ADT/iterator_range.h"15#include "gmock/gmock.h"16#include "gtest/gtest.h"17#include <type_traits>18 19namespace llvm {20 21//===--------------------------------------------------------------------===//22// Test initialization and use of operator[] for both read and write.23//===--------------------------------------------------------------------===//24 25TEST(EnumeratedArray, InitAndIndex) {26 27  enum class Colors { Red, Blue, Green, Last = Green };28 29  EnumeratedArray<float, Colors, Colors::Last, size_t> Array1;30 31  Array1[Colors::Red] = 1.0;32  Array1[Colors::Blue] = 2.0;33  Array1[Colors::Green] = 3.0;34 35  EXPECT_EQ(Array1[Colors::Red], 1.0);36  EXPECT_EQ(Array1[Colors::Blue], 2.0);37  EXPECT_EQ(Array1[Colors::Green], 3.0);38 39  EnumeratedArray<bool, Colors> Array2(true);40 41  EXPECT_TRUE(Array2[Colors::Red]);42  EXPECT_TRUE(Array2[Colors::Blue]);43  EXPECT_TRUE(Array2[Colors::Green]);44 45  Array2[Colors::Red] = true;46  Array2[Colors::Blue] = false;47  Array2[Colors::Green] = true;48 49  EXPECT_TRUE(Array2[Colors::Red]);50  EXPECT_FALSE(Array2[Colors::Blue]);51  EXPECT_TRUE(Array2[Colors::Green]);52 53  EnumeratedArray<float, Colors, Colors::Last, size_t> Array3 = {10.0, 11.0,54                                                                 12.0};55  EXPECT_EQ(Array3[Colors::Red], 10.0);56  EXPECT_EQ(Array3[Colors::Blue], 11.0);57  EXPECT_EQ(Array3[Colors::Green], 12.0);58}59 60//===--------------------------------------------------------------------===//61// Test size and empty function62//===--------------------------------------------------------------------===//63 64TEST(EnumeratedArray, Size) {65 66  enum class Colors { Red, Blue, Green, Last = Green };67 68  EnumeratedArray<float, Colors, Colors::Last, size_t> Array;69  const auto &ConstArray = Array;70 71  EXPECT_EQ(ConstArray.size(), 3u);72  EXPECT_EQ(ConstArray.empty(), false);73}74 75//===--------------------------------------------------------------------===//76// Test iterators77//===--------------------------------------------------------------------===//78 79TEST(EnumeratedArray, Iterators) {80 81  enum class Colors { Red, Blue, Green, Last = Green };82 83  EnumeratedArray<float, Colors, Colors::Last, size_t> Array;84  const auto &ConstArray = Array;85 86  Array[Colors::Red] = 1.0;87  Array[Colors::Blue] = 2.0;88  Array[Colors::Green] = 3.0;89 90  EXPECT_THAT(Array, testing::ElementsAre(1.0, 2.0, 3.0));91  EXPECT_THAT(ConstArray, testing::ElementsAre(1.0, 2.0, 3.0));92 93  EXPECT_THAT(make_range(Array.rbegin(), Array.rend()),94              testing::ElementsAre(3.0, 2.0, 1.0));95  EXPECT_THAT(make_range(ConstArray.rbegin(), ConstArray.rend()),96              testing::ElementsAre(3.0, 2.0, 1.0));97}98 99//===--------------------------------------------------------------------===//100// Test typedefs101//===--------------------------------------------------------------------===//102 103namespace {104 105enum class Colors { Red, Blue, Green, Last = Green };106 107using Array = EnumeratedArray<float, Colors, Colors::Last, size_t>;108 109static_assert(std::is_same_v<Array::value_type, float>,110              "Incorrect value_type type");111static_assert(std::is_same_v<Array::reference, float &>,112              "Incorrect reference type!");113static_assert(std::is_same_v<Array::pointer, float *>,114              "Incorrect pointer type!");115static_assert(std::is_same_v<Array::const_reference, const float &>,116              "Incorrect const_reference type!");117static_assert(std::is_same_v<Array::const_pointer, const float *>,118              "Incorrect const_pointer type!");119} // namespace120 121} // namespace llvm122