blob: e8563024835712d00279403c263b72c8fdb531ee [file] [log] [blame]
Arjun P10a898b32020-07-02 19:18:18 +05301//===- MatrixTest.cpp - Tests for Matrix ----------------------------------===//
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-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "mlir/Analysis/Presburger/Matrix.h"
10#include <gmock/gmock.h>
11#include <gtest/gtest.h>
12
13namespace mlir {
14
15TEST(MatrixTest, ReadWrite) {
16 Matrix mat(5, 5);
17 for (unsigned row = 0; row < 5; ++row)
18 for (unsigned col = 0; col < 5; ++col)
19 mat(row, col) = 10 * row + col;
20 for (unsigned row = 0; row < 5; ++row)
21 for (unsigned col = 0; col < 5; ++col)
22 EXPECT_EQ(mat(row, col), int(10 * row + col));
23}
24
25TEST(MatrixTest, SwapColumns) {
26 Matrix mat(5, 5);
27 for (unsigned row = 0; row < 5; ++row)
28 for (unsigned col = 0; col < 5; ++col)
29 mat(row, col) = col == 3 ? 1 : 0;
30 mat.swapColumns(3, 1);
31 for (unsigned row = 0; row < 5; ++row)
32 for (unsigned col = 0; col < 5; ++col)
33 EXPECT_EQ(mat(row, col), col == 1 ? 1 : 0);
34
35 // swap around all the other columns, swap (1, 3) twice for no effect.
36 mat.swapColumns(3, 1);
37 mat.swapColumns(2, 4);
38 mat.swapColumns(1, 3);
39 mat.swapColumns(0, 4);
40 mat.swapColumns(2, 2);
41
42 for (unsigned row = 0; row < 5; ++row)
43 for (unsigned col = 0; col < 5; ++col)
44 EXPECT_EQ(mat(row, col), col == 1 ? 1 : 0);
45}
46
47TEST(MatrixTest, SwapRows) {
48 Matrix mat(5, 5);
49 for (unsigned row = 0; row < 5; ++row)
50 for (unsigned col = 0; col < 5; ++col)
51 mat(row, col) = row == 2 ? 1 : 0;
52 mat.swapRows(2, 0);
53 for (unsigned row = 0; row < 5; ++row)
54 for (unsigned col = 0; col < 5; ++col)
55 EXPECT_EQ(mat(row, col), row == 0 ? 1 : 0);
56
57 // swap around all the other rows, swap (2, 0) twice for no effect.
58 mat.swapRows(3, 4);
59 mat.swapRows(1, 4);
60 mat.swapRows(2, 0);
61 mat.swapRows(1, 1);
62 mat.swapRows(0, 2);
63
64 for (unsigned row = 0; row < 5; ++row)
65 for (unsigned col = 0; col < 5; ++col)
66 EXPECT_EQ(mat(row, col), row == 0 ? 1 : 0);
67}
68
69TEST(MatrixTest, resizeVertically) {
70 Matrix mat(5, 5);
71 EXPECT_EQ(mat.getNumRows(), 5u);
72 EXPECT_EQ(mat.getNumColumns(), 5u);
73 for (unsigned row = 0; row < 5; ++row)
74 for (unsigned col = 0; col < 5; ++col)
75 mat(row, col) = 10 * row + col;
76
77 mat.resizeVertically(3);
Arjun Pc605dfc2021-07-01 20:12:56 +053078 ASSERT_TRUE(mat.hasConsistentState());
Arjun P10a898b32020-07-02 19:18:18 +053079 EXPECT_EQ(mat.getNumRows(), 3u);
80 EXPECT_EQ(mat.getNumColumns(), 5u);
81 for (unsigned row = 0; row < 3; ++row)
82 for (unsigned col = 0; col < 5; ++col)
83 EXPECT_EQ(mat(row, col), int(10 * row + col));
84
85 mat.resizeVertically(5);
Arjun Pc605dfc2021-07-01 20:12:56 +053086 ASSERT_TRUE(mat.hasConsistentState());
Arjun P10a898b32020-07-02 19:18:18 +053087 EXPECT_EQ(mat.getNumRows(), 5u);
88 EXPECT_EQ(mat.getNumColumns(), 5u);
89 for (unsigned row = 0; row < 5; ++row)
90 for (unsigned col = 0; col < 5; ++col)
91 EXPECT_EQ(mat(row, col), row >= 3 ? 0 : int(10 * row + col));
92}
93
Arjun Pc605dfc2021-07-01 20:12:56 +053094TEST(MatrixTest, insertColumns) {
95 Matrix mat(5, 5, 5, 10);
96 EXPECT_EQ(mat.getNumRows(), 5u);
97 EXPECT_EQ(mat.getNumColumns(), 5u);
98 for (unsigned row = 0; row < 5; ++row)
99 for (unsigned col = 0; col < 5; ++col)
100 mat(row, col) = 10 * row + col;
101
102 mat.insertColumns(3, 100);
103 ASSERT_TRUE(mat.hasConsistentState());
104 EXPECT_EQ(mat.getNumRows(), 5u);
105 EXPECT_EQ(mat.getNumColumns(), 105u);
106 for (unsigned row = 0; row < 5; ++row) {
107 for (unsigned col = 0; col < 105; ++col) {
108 if (col < 3)
109 EXPECT_EQ(mat(row, col), int(10 * row + col));
110 else if (3 <= col && col <= 102)
111 EXPECT_EQ(mat(row, col), 0);
112 else
113 EXPECT_EQ(mat(row, col), int(10 * row + col - 100));
114 }
115 }
116
117 mat.removeColumns(3, 100);
118 ASSERT_TRUE(mat.hasConsistentState());
119 mat.insertColumns(0, 0);
120 ASSERT_TRUE(mat.hasConsistentState());
121 mat.insertColumn(5);
122 ASSERT_TRUE(mat.hasConsistentState());
123
124 EXPECT_EQ(mat.getNumRows(), 5u);
125 EXPECT_EQ(mat.getNumColumns(), 6u);
126 for (unsigned row = 0; row < 5; ++row)
127 for (unsigned col = 0; col < 6; ++col)
128 EXPECT_EQ(mat(row, col), col == 5 ? 0 : 10 * row + col);
129}
130
131TEST(MatrixTest, insertRows) {
132 Matrix mat(5, 5, 5, 10);
133 ASSERT_TRUE(mat.hasConsistentState());
134 EXPECT_EQ(mat.getNumRows(), 5u);
135 EXPECT_EQ(mat.getNumColumns(), 5u);
136 for (unsigned row = 0; row < 5; ++row)
137 for (unsigned col = 0; col < 5; ++col)
138 mat(row, col) = 10 * row + col;
139
140 mat.insertRows(3, 100);
141 ASSERT_TRUE(mat.hasConsistentState());
142 EXPECT_EQ(mat.getNumRows(), 105u);
143 EXPECT_EQ(mat.getNumColumns(), 5u);
144 for (unsigned row = 0; row < 105; ++row) {
145 for (unsigned col = 0; col < 5; ++col) {
146 if (row < 3)
147 EXPECT_EQ(mat(row, col), int(10 * row + col));
148 else if (3 <= row && row <= 102)
149 EXPECT_EQ(mat(row, col), 0);
150 else
151 EXPECT_EQ(mat(row, col), int(10 * (row - 100) + col));
152 }
153 }
154
155 mat.removeRows(3, 100);
156 ASSERT_TRUE(mat.hasConsistentState());
157 mat.insertRows(0, 0);
158 ASSERT_TRUE(mat.hasConsistentState());
159 mat.insertRow(5);
160 ASSERT_TRUE(mat.hasConsistentState());
161
162 EXPECT_EQ(mat.getNumRows(), 6u);
163 EXPECT_EQ(mat.getNumColumns(), 5u);
164 for (unsigned row = 0; row < 6; ++row)
165 for (unsigned col = 0; col < 5; ++col)
166 EXPECT_EQ(mat(row, col), row == 5 ? 0 : 10 * row + col);
167}
168
Arjun Pf263ea12021-09-17 13:14:50 +0530169TEST(MatrixTest, resize) {
170 Matrix mat(5, 5);
171 EXPECT_EQ(mat.getNumRows(), 5u);
172 EXPECT_EQ(mat.getNumColumns(), 5u);
173 for (unsigned row = 0; row < 5; ++row)
174 for (unsigned col = 0; col < 5; ++col)
175 mat(row, col) = 10 * row + col;
176
177 mat.resize(3, 3);
178 ASSERT_TRUE(mat.hasConsistentState());
179 EXPECT_EQ(mat.getNumRows(), 3u);
180 EXPECT_EQ(mat.getNumColumns(), 3u);
181 for (unsigned row = 0; row < 3; ++row)
182 for (unsigned col = 0; col < 3; ++col)
183 EXPECT_EQ(mat(row, col), int(10 * row + col));
184
185 mat.resize(7, 7);
186 ASSERT_TRUE(mat.hasConsistentState());
187 EXPECT_EQ(mat.getNumRows(), 7u);
188 EXPECT_EQ(mat.getNumColumns(), 7u);
189 for (unsigned row = 0; row < 7; ++row)
190 for (unsigned col = 0; col < 7; ++col)
191 EXPECT_EQ(mat(row, col), row >= 3 || col >= 3 ? 0 : int(10 * row + col));
192}
193
Arjun P10a898b32020-07-02 19:18:18 +0530194} // namespace mlir