Skip to content
Snippets Groups Projects
test_lin_alg.cpp 1.98 KiB
Newer Older
Kurt A. O'Hearn's avatar
Kurt A. O'Hearn committed
#include <gtest/gtest.h>

#include "mytypes.h"
#include "allocate.c"
#include "lin_alg.c"
#include "list.c"
#include "tool_box.c"
#include "vector.c"

#define VEC_SIZE (100)


namespace
{
    class LinAlgTest : public ::testing::Test
    {
        protected:
            real *a, *res;
            sparse_matrix *sm;

            LinAlgTest( )
            {
                if ( !Allocate_Matrix( &sm, VEC_SIZE, VEC_SIZE ) ||
                        (a = (real *) malloc( VEC_SIZE * sizeof(real))) == NULL ||
                        (res = (real *) malloc( VEC_SIZE * sizeof(real))) == NULL )
                {
                    throw new std::bad_alloc( );
                }
            }

            virtual ~LinAlgTest( )
            {
                if ( a != NULL )
                {
                    free( a );
                }
                if ( res != NULL )
                {
                    free( res );
                }
                if ( sm != NULL )
                {
                    Deallocate_Matrix( sm );
                }

            }

            virtual void SetUp( )
            {
                for ( int i = 0; i < VEC_SIZE; ++i )
                {
                    a[i] = 1.0;
                }

                // set up sparse matrix which is an identity matrix in our case
                for ( int i = 0; i < sm->n + 1; i++ )
                {
                    sm->start[i] = i;
                }

                for ( int i = 0; i < sm->start[sm->n]; i++ )
                {
                    sm->j[i] = i;
                    sm->val[i] = 1.0;
                }
            }


            virtual void TearDown( )
            {

            }
    };


    TEST_F(LinAlgTest, Sparse_MatVec)
    {
        Sparse_MatVec( sm, a, res );

        for ( int i = 0; i < VEC_SIZE; ++i )
        {
            ASSERT_EQ( res[i], a[i] );
        }
    }
}


int main( int argc, char **argv )
{
    ::testing::InitGoogleTest( &argc, argv );
    return RUN_ALL_TESTS( );
}