1 //===-- SnippetGeneratorTest.cpp --------------------------------*- C++ -*-===//
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-exception
7 //===----------------------------------------------------------------------===//
9 #include "SnippetGenerator.h"
10 #include "gmock/gmock.h"
11 #include "gtest/gtest.h"
12 #include <initializer_list>
19 TEST(CombinationGenerator
, Square
) {
20 const std::vector
<std::vector
<int>> Choices
{{0, 1}, {2, 3}};
22 std::vector
<std::vector
<int>> Variants
;
23 CombinationGenerator
<int, std::vector
<int>, 4> G(Choices
);
24 const size_t NumVariants
= G
.numCombinations();
25 G
.generate([&](ArrayRef
<int> State
) -> bool {
26 Variants
.emplace_back(State
);
27 return false; // keep going
30 const std::vector
<std::vector
<int>> ExpectedVariants
{
36 ASSERT_THAT(Variants
, ::testing::SizeIs(NumVariants
));
37 ASSERT_THAT(Variants
, ::testing::ContainerEq(ExpectedVariants
));
40 TEST(CombinationGenerator
, MiddleColumn
) {
41 const std::vector
<std::vector
<int>> Choices
{{0}, {1, 2}, {3}};
43 std::vector
<std::vector
<int>> Variants
;
44 CombinationGenerator
<int, std::vector
<int>, 4> G(Choices
);
45 const size_t NumVariants
= G
.numCombinations();
46 G
.generate([&](ArrayRef
<int> State
) -> bool {
47 Variants
.emplace_back(State
);
48 return false; // keep going
51 const std::vector
<std::vector
<int>> ExpectedVariants
{
55 ASSERT_THAT(Variants
, ::testing::SizeIs(NumVariants
));
56 ASSERT_THAT(Variants
, ::testing::ContainerEq(ExpectedVariants
));
59 TEST(CombinationGenerator
, SideColumns
) {
60 const std::vector
<std::vector
<int>> Choices
{{0, 1}, {2}, {3, 4}};
62 std::vector
<std::vector
<int>> Variants
;
63 CombinationGenerator
<int, std::vector
<int>, 4> G(Choices
);
64 const size_t NumVariants
= G
.numCombinations();
65 G
.generate([&](ArrayRef
<int> State
) -> bool {
66 Variants
.emplace_back(State
);
67 return false; // keep going
70 const std::vector
<std::vector
<int>> ExpectedVariants
{
76 ASSERT_THAT(Variants
, ::testing::SizeIs(NumVariants
));
77 ASSERT_THAT(Variants
, ::testing::ContainerEq(ExpectedVariants
));
80 TEST(CombinationGenerator
, LeftColumn
) {
81 const std::vector
<std::vector
<int>> Choices
{{0, 1}, {2}};
83 std::vector
<std::vector
<int>> Variants
;
84 CombinationGenerator
<int, std::vector
<int>, 4> G(Choices
);
85 const size_t NumVariants
= G
.numCombinations();
86 G
.generate([&](ArrayRef
<int> State
) -> bool {
87 Variants
.emplace_back(State
);
88 return false; // keep going
91 const std::vector
<std::vector
<int>> ExpectedVariants
{
95 ASSERT_THAT(Variants
, ::testing::SizeIs(NumVariants
));
96 ASSERT_THAT(Variants
, ::testing::ContainerEq(ExpectedVariants
));
99 TEST(CombinationGenerator
, RightColumn
) {
100 const std::vector
<std::vector
<int>> Choices
{{0}, {1, 2}};
102 std::vector
<std::vector
<int>> Variants
;
103 CombinationGenerator
<int, std::vector
<int>, 4> G(Choices
);
104 const size_t NumVariants
= G
.numCombinations();
105 G
.generate([&](ArrayRef
<int> State
) -> bool {
106 Variants
.emplace_back(State
);
107 return false; // keep going
110 const std::vector
<std::vector
<int>> ExpectedVariants
{
114 ASSERT_THAT(Variants
, ::testing::SizeIs(NumVariants
));
115 ASSERT_THAT(Variants
, ::testing::ContainerEq(ExpectedVariants
));
118 TEST(CombinationGenerator
, Column
) {
119 const std::vector
<std::vector
<int>> Choices
{{0, 1}};
121 std::vector
<std::vector
<int>> Variants
;
122 CombinationGenerator
<int, std::vector
<int>, 4> G(Choices
);
123 const size_t NumVariants
= G
.numCombinations();
124 G
.generate([&](ArrayRef
<int> State
) -> bool {
125 Variants
.emplace_back(State
);
126 return false; // keep going
129 const std::vector
<std::vector
<int>> ExpectedVariants
{
133 ASSERT_THAT(Variants
, ::testing::SizeIs(NumVariants
));
134 ASSERT_THAT(Variants
, ::testing::ContainerEq(ExpectedVariants
));
137 TEST(CombinationGenerator
, Row
) {
138 const std::vector
<std::vector
<int>> Choices
{{0}, {1}};
140 std::vector
<std::vector
<int>> Variants
;
141 CombinationGenerator
<int, std::vector
<int>, 4> G(Choices
);
142 const size_t NumVariants
= G
.numCombinations();
143 G
.generate([&](ArrayRef
<int> State
) -> bool {
144 Variants
.emplace_back(State
);
145 return false; // keep going
148 const std::vector
<std::vector
<int>> ExpectedVariants
{
151 ASSERT_THAT(Variants
, ::testing::SizeIs(NumVariants
));
152 ASSERT_THAT(Variants
, ::testing::ContainerEq(ExpectedVariants
));
155 TEST(CombinationGenerator
, Singleton
) {
156 const std::vector
<std::vector
<int>> Choices
{{0}};
158 std::vector
<std::vector
<int>> Variants
;
159 CombinationGenerator
<int, std::vector
<int>, 4> G(Choices
);
160 const size_t NumVariants
= G
.numCombinations();
161 G
.generate([&](ArrayRef
<int> State
) -> bool {
162 Variants
.emplace_back(State
);
163 return false; // keep going
166 const std::vector
<std::vector
<int>> ExpectedVariants
{
169 ASSERT_THAT(Variants
, ::testing::SizeIs(NumVariants
));
170 ASSERT_THAT(Variants
, ::testing::ContainerEq(ExpectedVariants
));
174 } // namespace exegesis