brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.3 KiB · cf187e6 Raw
177 lines · cpp
1//===- llvm/unittest/ADT/CombinationGeneratorTest.cpp ---------------------===//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#include "llvm/ADT/CombinationGenerator.h"10#include "llvm/ADT/ArrayRef.h"11#include "llvm/ADT/STLExtras.h"12#include "llvm/Support/ErrorHandling.h"13#include "gmock/gmock.h"14#include "gtest/gtest.h"15#include <cstddef>16#include <vector>17 18using namespace llvm;19 20namespace {21 22TEST(CombinationGenerator, Square) {23  const std::vector<std::vector<int>> Choices{{0, 1}, {2, 3}};24 25  std::vector<std::vector<int>> Variants;26  CombinationGenerator<int, std::vector<int>, 4> G(Choices);27  const size_t NumVariants = G.numCombinations();28  G.generate([&](ArrayRef<int> State) -> bool {29    Variants.emplace_back(State);30    return false; // keep going31  });32 33  const std::vector<std::vector<int>> ExpectedVariants{34      {0, 2},35      {0, 3},36      {1, 2},37      {1, 3},38  };39  ASSERT_THAT(Variants, ::testing::SizeIs(NumVariants));40  ASSERT_THAT(Variants, ::testing::ContainerEq(ExpectedVariants));41}42 43TEST(CombinationGenerator, MiddleColumn) {44  const std::vector<std::vector<int>> Choices{{0}, {1, 2}, {3}};45 46  std::vector<std::vector<int>> Variants;47  CombinationGenerator<int, std::vector<int>, 4> G(Choices);48  const size_t NumVariants = G.numCombinations();49  G.generate([&](ArrayRef<int> State) -> bool {50    Variants.emplace_back(State);51    return false; // keep going52  });53 54  const std::vector<std::vector<int>> ExpectedVariants{55      {0, 1, 3},56      {0, 2, 3},57  };58  ASSERT_THAT(Variants, ::testing::SizeIs(NumVariants));59  ASSERT_THAT(Variants, ::testing::ContainerEq(ExpectedVariants));60}61 62TEST(CombinationGenerator, SideColumns) {63  const std::vector<std::vector<int>> Choices{{0, 1}, {2}, {3, 4}};64 65  std::vector<std::vector<int>> Variants;66  CombinationGenerator<int, std::vector<int>, 4> G(Choices);67  const size_t NumVariants = G.numCombinations();68  G.generate([&](ArrayRef<int> State) -> bool {69    Variants.emplace_back(State);70    return false; // keep going71  });72 73  const std::vector<std::vector<int>> ExpectedVariants{74      {0, 2, 3},75      {0, 2, 4},76      {1, 2, 3},77      {1, 2, 4},78  };79  ASSERT_THAT(Variants, ::testing::SizeIs(NumVariants));80  ASSERT_THAT(Variants, ::testing::ContainerEq(ExpectedVariants));81}82 83TEST(CombinationGenerator, LeftColumn) {84  const std::vector<std::vector<int>> Choices{{0, 1}, {2}};85 86  std::vector<std::vector<int>> Variants;87  CombinationGenerator<int, std::vector<int>, 4> G(Choices);88  const size_t NumVariants = G.numCombinations();89  G.generate([&](ArrayRef<int> State) -> bool {90    Variants.emplace_back(State);91    return false; // keep going92  });93 94  const std::vector<std::vector<int>> ExpectedVariants{95      {0, 2},96      {1, 2},97  };98  ASSERT_THAT(Variants, ::testing::SizeIs(NumVariants));99  ASSERT_THAT(Variants, ::testing::ContainerEq(ExpectedVariants));100}101 102TEST(CombinationGenerator, RightColumn) {103  const std::vector<std::vector<int>> Choices{{0}, {1, 2}};104 105  std::vector<std::vector<int>> Variants;106  CombinationGenerator<int, std::vector<int>, 4> G(Choices);107  const size_t NumVariants = G.numCombinations();108  G.generate([&](ArrayRef<int> State) -> bool {109    Variants.emplace_back(State);110    return false; // keep going111  });112 113  const std::vector<std::vector<int>> ExpectedVariants{114      {0, 1},115      {0, 2},116  };117  ASSERT_THAT(Variants, ::testing::SizeIs(NumVariants));118  ASSERT_THAT(Variants, ::testing::ContainerEq(ExpectedVariants));119}120 121TEST(CombinationGenerator, Column) {122  const std::vector<std::vector<int>> Choices{{0, 1}};123 124  std::vector<std::vector<int>> Variants;125  CombinationGenerator<int, std::vector<int>, 4> G(Choices);126  const size_t NumVariants = G.numCombinations();127  G.generate([&](ArrayRef<int> State) -> bool {128    Variants.emplace_back(State);129    return false; // keep going130  });131 132  const std::vector<std::vector<int>> ExpectedVariants{133      {0},134      {1},135  };136  ASSERT_THAT(Variants, ::testing::SizeIs(NumVariants));137  ASSERT_THAT(Variants, ::testing::ContainerEq(ExpectedVariants));138}139 140TEST(CombinationGenerator, Row) {141  const std::vector<std::vector<int>> Choices{{0}, {1}};142 143  std::vector<std::vector<int>> Variants;144  CombinationGenerator<int, std::vector<int>, 4> G(Choices);145  const size_t NumVariants = G.numCombinations();146  G.generate([&](ArrayRef<int> State) -> bool {147    Variants.emplace_back(State);148    return false; // keep going149  });150 151  const std::vector<std::vector<int>> ExpectedVariants{152      {0, 1},153  };154  ASSERT_THAT(Variants, ::testing::SizeIs(NumVariants));155  ASSERT_THAT(Variants, ::testing::ContainerEq(ExpectedVariants));156}157 158TEST(CombinationGenerator, Singleton) {159  const std::vector<std::vector<int>> Choices{{0}};160 161  std::vector<std::vector<int>> Variants;162  CombinationGenerator<int, std::vector<int>, 4> G(Choices);163  const size_t NumVariants = G.numCombinations();164  G.generate([&](ArrayRef<int> State) -> bool {165    Variants.emplace_back(State);166    return false; // keep going167  });168 169  const std::vector<std::vector<int>> ExpectedVariants{170      {0},171  };172  ASSERT_THAT(Variants, ::testing::SizeIs(NumVariants));173  ASSERT_THAT(Variants, ::testing::ContainerEq(ExpectedVariants));174}175 176} // end anonymous namespace177