add more tests
This commit is contained in:
@@ -224,6 +224,97 @@ TEST_F(Vector2DTest, row_and_col_methods_return_same_as_operator) {
|
||||
EXPECT_EQ(col1[5], col2[5]);
|
||||
}
|
||||
|
||||
// ==================== PROXY SEARCH TESTS ====================
|
||||
TEST_F(Vector2DTest, row_proxy_search_works) {
|
||||
auto row = vec[10];
|
||||
// indexOf
|
||||
ssize_t idx = row.indexOf(vec.element(10, 5));
|
||||
EXPECT_EQ(idx, 5);
|
||||
EXPECT_EQ(row.indexOf(-999), -1);
|
||||
|
||||
// lastIndexOf (add a duplicate)
|
||||
vec.element(10, 7) = vec.element(10, 5); // duplicate
|
||||
idx = row.lastIndexOf(vec.element(10, 5));
|
||||
EXPECT_EQ(idx, 7);
|
||||
|
||||
// indexWhere
|
||||
auto isEven = [](const int & e) { return e % 2 == 0; };
|
||||
ssize_t firstEven = row.indexWhere(isEven);
|
||||
EXPECT_GE(firstEven, 0);
|
||||
|
||||
// lastIndexWhere
|
||||
ssize_t lastEven = row.lastIndexWhere(isEven);
|
||||
EXPECT_GE(lastEven, firstEven);
|
||||
}
|
||||
|
||||
TEST_F(Vector2DTest, col_proxy_search_works) {
|
||||
auto col = vec.col(9); // используем столбец 9, где все элементы нечётные
|
||||
ssize_t idx = col.indexOf(vec.element(12, 9));
|
||||
EXPECT_EQ(idx, 12);
|
||||
EXPECT_EQ(col.indexOf(-999), -1);
|
||||
|
||||
vec.element(20, 9) = vec.element(12, 9); // duplicate
|
||||
idx = col.lastIndexOf(vec.element(12, 9));
|
||||
EXPECT_EQ(idx, 20);
|
||||
|
||||
auto isOdd = [](const int & e) { return e % 2 != 0; };
|
||||
ssize_t firstOdd = col.indexWhere(isOdd);
|
||||
EXPECT_GE(firstOdd, 0);
|
||||
ssize_t lastOdd = col.lastIndexWhere(isOdd);
|
||||
EXPECT_GE(lastOdd, firstOdd);
|
||||
}
|
||||
|
||||
TEST_F(Vector2DTest, rowconst_proxy_search_works) {
|
||||
const auto & constVec = vec;
|
||||
const auto row = constVec[10];
|
||||
ssize_t idx = row.indexOf(vec.element(10, 5));
|
||||
EXPECT_EQ(idx, 5);
|
||||
idx = row.lastIndexOf(vec.element(10, 5));
|
||||
EXPECT_EQ(idx, 5);
|
||||
}
|
||||
|
||||
TEST_F(Vector2DTest, colconst_proxy_search_works) {
|
||||
const auto & constVec = vec;
|
||||
auto col = constVec.col(8);
|
||||
ssize_t idx = col.indexOf(vec.element(12, 8));
|
||||
EXPECT_EQ(idx, 12);
|
||||
idx = col.lastIndexOf(vec.element(12, 8));
|
||||
EXPECT_EQ(idx, 12);
|
||||
}
|
||||
|
||||
// ==================== ROW/COLUMN ITERATION TESTS ====================
|
||||
TEST_F(Vector2DTest, forEachRow_modifies_rows) {
|
||||
vec.forEachRow([](PIVector2D<int>::Row row) {
|
||||
for (size_t c = 0; c < row.size(); ++c)
|
||||
row[c] = 999;
|
||||
});
|
||||
for (size_t r = 0; r < vec.rows(); ++r)
|
||||
for (size_t c = 0; c < vec.cols(); ++c)
|
||||
EXPECT_EQ(vec.element(r, c), 999);
|
||||
}
|
||||
|
||||
TEST_F(Vector2DTest, forEachRow_readonly_counts_rows) {
|
||||
size_t count = 0;
|
||||
vec.forEachRow([&count](PIVector2D<int>::RowConst) { ++count; });
|
||||
EXPECT_EQ(count, vec.rows());
|
||||
}
|
||||
|
||||
TEST_F(Vector2DTest, forEachColumn_modifies_columns) {
|
||||
vec.forEachColumn([](PIVector2D<int>::Col col) {
|
||||
for (size_t r = 0; r < col.size(); ++r)
|
||||
col[r] = 777;
|
||||
});
|
||||
for (size_t r = 0; r < vec.rows(); ++r)
|
||||
for (size_t c = 0; c < vec.cols(); ++c)
|
||||
EXPECT_EQ(vec.element(r, c), 777);
|
||||
}
|
||||
|
||||
TEST_F(Vector2DTest, forEachColumn_readonly_counts_columns) {
|
||||
size_t count = 0;
|
||||
vec.forEachColumn([&count](PIVector2D<int>::ColConst) { ++count; });
|
||||
EXPECT_EQ(count, vec.cols());
|
||||
}
|
||||
|
||||
// ==================== MODIFIER TESTS ====================
|
||||
TEST_F(Vector2DTest, setRow_replaces_row_correctly) {
|
||||
PIVector<int> newRow(COLS_COUNT_INIT);
|
||||
@@ -460,13 +551,13 @@ TEST_F(Vector2DTest, assign_is_alias_for_fill) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(Vector2DTest, assign_with_size_resets_to_single_row) {
|
||||
vec.assign(3, 4, 77);
|
||||
EXPECT_EQ(vec.rows(), 3);
|
||||
EXPECT_EQ(vec.cols(), 4);
|
||||
for (size_t r = 0; r < vec.rows(); ++r) {
|
||||
for (size_t c = 0; c < vec.cols(); ++c) {
|
||||
EXPECT_EQ(vec.element(r, c), 77);
|
||||
TEST_F(Vector2DTest, assign_with_dimensions_resets_and_fills) {
|
||||
vec.assign(5, 7, 123);
|
||||
EXPECT_EQ(vec.rows(), 5);
|
||||
EXPECT_EQ(vec.cols(), 7);
|
||||
for (size_t r = 0; r < 5; ++r) {
|
||||
for (size_t c = 0; c < 7; ++c) {
|
||||
EXPECT_EQ(vec.element(r, c), 123);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -674,25 +765,41 @@ TEST_F(Vector2DTest, forEach_modifying_changes_elements) {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
TEST_F(Vector2DTest, forEachIndexed_readonly_uses_indices) {
|
||||
bool allCorrect = true;
|
||||
vec.forEachIndexed([&allCorrect](size_t r, size_t c, const int & e) {
|
||||
if (e != static_cast<int>(r * COLS_COUNT_INIT + c)) allCorrect = false;
|
||||
});
|
||||
EXPECT_TRUE(allCorrect);
|
||||
TEST_F(Vector2DTest, indexOf_returns_correct_pair) {
|
||||
auto p = vec.indexOf(vec.element(10, 15));
|
||||
EXPECT_EQ(p.first, 10);
|
||||
EXPECT_EQ(p.second, 15);
|
||||
p = vec.indexOf(-999);
|
||||
EXPECT_EQ(p.first, -1);
|
||||
EXPECT_EQ(p.second, -1);
|
||||
}
|
||||
|
||||
TEST_F(Vector2DTest, forEachIndexed_modifying_uses_indices) {
|
||||
vec.forEachIndexed([](size_t r, size_t c, int & e) { e = static_cast<int>(r * 1000 + c); });
|
||||
|
||||
for (size_t r = 0; r < ROWS_COUNT_INIT; ++r) {
|
||||
for (size_t c = 0; c < COLS_COUNT_INIT; ++c) {
|
||||
EXPECT_EQ(vec.element(r, c), static_cast<int>(r * 1000 + c));
|
||||
}
|
||||
}
|
||||
TEST_F(Vector2DTest, indexWhere_returns_correct_pair) {
|
||||
vec.element(5, 5) = -42;
|
||||
auto isTarget = [](const int & e) { return e == -42; };
|
||||
auto p = vec.indexWhere(isTarget);
|
||||
EXPECT_EQ(p.first, 5);
|
||||
EXPECT_EQ(p.second, 5);
|
||||
}
|
||||
|
||||
TEST_F(Vector2DTest, lastIndexOf_works) {
|
||||
int val = vec.element(10, 10);
|
||||
vec.element(20, 20) = val; // duplicate
|
||||
auto p = vec.lastIndexOf(val);
|
||||
EXPECT_EQ(p.first, 20);
|
||||
EXPECT_EQ(p.second, 20);
|
||||
}
|
||||
|
||||
TEST_F(Vector2DTest, lastIndexWhere_works) {
|
||||
auto isLarge = [](const int & e) { return e > 500; };
|
||||
auto p = vec.lastIndexWhere(isLarge);
|
||||
EXPECT_GE(p.first, 0);
|
||||
EXPECT_GE(p.second, 0);
|
||||
// The last element with value >500 should be the largest index
|
||||
size_t lastFlat = p.first * vec.cols() + p.second;
|
||||
size_t expectedLastFlat = vec.size() - 1;
|
||||
EXPECT_EQ(lastFlat, expectedLastFlat);
|
||||
}
|
||||
*/
|
||||
|
||||
TEST_F(Vector2DTest, reduce_accumulates_correctly) {
|
||||
int sum = vec.reduce<int>([](const int & e, const int & acc) { return e + acc; });
|
||||
|
||||
Reference in New Issue
Block a user