Здравствуйте, _hum_, Вы писали:
__>так а где здесь код-то самого транспонирования?
Он не нужен. Нужен код тестов.
__>ведь ошибки именно там кроются. и если вы увидите срабатывание ассертов, что делать дальше будете?
Покупать акции Газпрома, а что еще можно сделать?
Разбираться, конечно же, в причинах срабатывания ассертов.
__>как, например, обнаружите глупейшую ошибку типа Matrix[i][j] = Matrix[j][i] для in-place трансполнирования квадратной матрицы?
Вы не поверите...
Предположим, что у нас и правда завелась функция
void transposeInPlace(Matrix& mtx);
пишем тест для нее. Естественно, предполагается, что у нас есть оператор сравнения двух матриц.
TEST(transposeMatrix, inPlace)
{
Matrix mtx =
{1 2 3
4 5 6
7 8 9}; // Псевдокод, вестимо
Matrix expected =
{1 4 7
2 5 8
3 6 9}; // Транспонировали вручную, на клочке бумажки
transposeInPlace(mtx);
ASSERT_EQ(expected, mtx); // Глупая ошибка не пройдет
Кстати, сигнатура
Matrix transpose(const Matrix& original);
подразумевает, что явного in-place транспонирования не предусмотрено. RVO тоже не сделает это транспонирование in-place, но мы все слышали про странные глюки в компиляторах, поэтому придумаем такое, чисто для очистки совести
TEST(transposeMatrix, testThatShouldNotExist)
{
Matrix mtx = ...; // Тут инициализация квадратной матрицы
Matrix expected = ...; // Вручную инициализированная транспонированная матрица
mtx = transpose(mtx);
ASSERT_EQ(expected, mtx);