/*
 * I3D.h
 *
 * unit test of methods for creating and deleting 3D pointer-based matrices.
 *
 *  Created on: Feb 7, 2014
 *      Author: godin
 */

#ifndef I3D_TEST_H_
#define I3D_TEST_H_

#include "I3D.h"

#include <cxxtest/TestSuite.h>

class I3D_Test : public CxxTest::TestSuite
{
public:

    // Test basic allocation and access
    void testNew( void )
    {
        int m = 7, n = 4, o = 5;
        float*** values = I3D<float>::New3D( m, n, o );
        float inc = 1;
        for( int i = 0; i < m; ++i )
        {
            for( int j = 0; j < n; ++j )
            {
                for( int k = 0; k < o; ++k )
                {
                    values[i][j][k] = inc;
                    inc = inc + 1.0f;
                }
            }
        }
        int sum = 0;
        for( int i = 0; i < m; ++i )
        {
            for( int j = 0; j < n; ++j )
            {
                for( int k = 0; k < o; ++k )
                {
                    sum = sum + values[i][j][k];
                }
            }
        }
        TS_ASSERT_DELTA( sum, ( m * n * o ) * ( m * n * o + 1 ) / 2.0f, 0.01 );
        I3D<float>::Delete3D( values );
    }
};

#endif /* I3D_TEST_H_ */
