blob: 574486d42c607709514004d043ffe1b5022d4ba3 [file] [log] [blame]
//
// Copyright (c) 2010 Linaro Limited
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the MIT License which accompanies
// this distribution, and is available at
// http://www.opensource.org/licenses/mit-license.php
//
// Contributors:
// Jesse Barker - original implementation.
//
#include <iostream>
#include "libmatrix_test.h"
#include "transpose_test.h"
#include "../mat.h"
using LibMatrix::mat2;
using LibMatrix::mat3;
using LibMatrix::mat4;
using std::cout;
using std::endl;
void
MatrixTest2x2Transpose::run(const Options& options)
{
// First, a simple test to ensure that the transpose of the identity is
// the identity.
if (options.beVerbose())
{
cout << endl << "Assertion 1: Transpose of the identity is the identity." << endl << endl;
}
mat2 m;
if (options.beVerbose())
{
cout << "Starting with mat2 (should be identity): " << endl << endl;
m.print();
}
m.transpose();
if (options.beVerbose())
{
cout << endl << "Transpose of identity (should be identity): " << endl << endl;
m.print();
}
mat2 mi;
if (m != mi)
{
// FAIL! Transpose of the identity is the identity.
return;
}
// At this point, we have 2 identity matrices.
// Next, set an element in the matrix and transpose twice. We should see
// the original matrix (with i,j set).
if (options.beVerbose())
{
cout << endl << "Assertion 2: Transposing a matrix twice yields the original matrix." << endl << endl;
}
m[0][1] = 6.3;
if (options.beVerbose())
{
cout << "Matrix should now have (0, 1) == 6.300000" << endl << endl;
m.print();
}
mi = m;
m.transpose().transpose();
if (options.beVerbose())
{
cout << endl << "Matrix should now have (0, 1) == 6.300000" << endl << endl;
m.print();
}
if (m != mi)
{
// FAIL! Transposing the same matrix twice should yield the original.
return;
}
// Next, reset mi back to the identity. Set element element j,i in this
// matrix and transpose m. They should now be equal.
if (options.beVerbose())
{
cout << endl << "Assertion 3: Transpose of matrix (i,j) == x is equal to matrix (j,i) == x." << endl << endl;
}
mi.setIdentity();
mi[1][0] = 6.3;
m.transpose();
if (options.beVerbose())
{
cout << "Matrix should now have (1, 0) == 6.300000" << endl << endl;
m.print();
cout << endl;
}
if (m == mi)
{
pass_ = true;
}
// FAIL! Transposing the same matrix twice should yield the original.
}
void
MatrixTest3x3Transpose::run(const Options& options)
{
// First, a simple test to ensure that the transpose of the identity is
// the identity.
if (options.beVerbose())
{
cout << endl << "Assertion 1: Transpose of the identity is the identity." << endl << endl;
}
mat3 m;
if (options.beVerbose())
{
cout << "Starting with mat2 (should be identity): " << endl << endl;
m.print();
}
m.transpose();
if (options.beVerbose())
{
cout << endl << "Transpose of identity (should be identity): " << endl << endl;
m.print();
}
mat3 mi;
if (m != mi)
{
// FAIL! Transpose of the identity is the identity.
return;
}
// At this point, we have 2 identity matrices.
// Next, set an element in the matrix and transpose twice. We should see
// the original matrix (with i,j set).
if (options.beVerbose())
{
cout << endl << "Assertion 2: Transposing a matrix twice yields the original matrix." << endl << endl;
}
m[0][1] = 6.3;
if (options.beVerbose())
{
cout << "Matrix should now have (0, 1) == 6.300000" << endl << endl;
m.print();
}
mi = m;
m.transpose().transpose();
if (options.beVerbose())
{
cout << endl << "Matrix should now have (0, 1) == 6.300000" << endl << endl;
m.print();
}
if (m != mi)
{
// FAIL! Transposing the same matrix twice should yield the original.
return;
}
// Next, reset mi back to the identity. Set element element j,i in this
// matrix and transpose m. They should now be equal.
if (options.beVerbose())
{
cout << endl << "Assertion 3: Transpose of matrix (i,j) == x is equal to matrix (j,i) == x." << endl << endl;
}
mi.setIdentity();
mi[1][0] = 6.3;
m.transpose();
if (options.beVerbose())
{
cout << "Matrix should now have (1, 0) == 6.300000" << endl << endl;
m.print();
cout << endl;
}
if (m == mi)
{
pass_ = true;
}
// FAIL! Transposing the same matrix twice should yield the original.
}
void
MatrixTest4x4Transpose::run(const Options& options)
{
// First, a simple test to ensure that the transpose of the identity is
// the identity.
if (options.beVerbose())
{
cout << endl << "Assertion 1: Transpose of the identity is the identity." << endl << endl;
}
mat4 m;
if (options.beVerbose())
{
cout << "Starting with mat2 (should be identity): " << endl << endl;
m.print();
}
m.transpose();
if (options.beVerbose())
{
cout << endl << "Transpose of identity (should be identity): " << endl << endl;
m.print();
}
mat4 mi;
if (m != mi)
{
// FAIL! Transpose of the identity is the identity.
return;
}
// At this point, we have 2 identity matrices.
// Next, set an element in the matrix and transpose twice. We should see
// the original matrix (with i,j set).
if (options.beVerbose())
{
cout << endl << "Assertion 2: Transposing a matrix twice yields the original matrix." << endl << endl;
}
m[0][1] = 6.3;
if (options.beVerbose())
{
cout << "Matrix should now have (0, 1) == 6.300000" << endl << endl;
m.print();
}
mi = m;
m.transpose().transpose();
if (options.beVerbose())
{
cout << endl << "Matrix should now have (0, 1) == 6.300000" << endl << endl;
m.print();
}
if (m != mi)
{
// FAIL! Transposing the same matrix twice should yield the original.
return;
}
// Next, reset mi back to the identity. Set element element j,i in this
// matrix and transpose m. They should now be equal.
if (options.beVerbose())
{
cout << endl << "Assertion 3: Transpose of matrix (i,j) == x is equal to matrix (j,i) == x." << endl << endl;
}
mi.setIdentity();
mi[1][0] = 6.3;
m.transpose();
if (options.beVerbose())
{
cout << "Matrix should now have (1, 0) == 6.300000" << endl << endl;
m.print();
cout << endl;
}
if (m == mi)
{
pass_ = true;
}
// FAIL! Transposing the same matrix twice should yield the original.
}