/* File: realtest.c
   Using the functions in dense.c to test the functions in
   sparse.c.
*/

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "sparse.h"
#include "dense.h"

main() {
   matrix_ptr Test1, Test2, Answer ;
   dm_ptr DTest1, DTest2, DAnswer, Check ;
   double comp ;
   int result ;


   /*** Sparse Matrix Test ***/
   printf("Using Sparse Operations...\n") ;

   /* Read in the test files */
   Test1 = LoadMatrix("rand1") ;
   Test2 = LoadMatrix("rand2") ;
   assert(Test1 != NULL && Test2 != NULL) ; 

   /* Test Multiplication */
   Answer = MultiplyMatrix(Test1, Test2) ;
   assert(Answer != NULL) ;
   result = StoreMatrix("temp", Answer) ;
   assert(result != 0) ;

   FreeMatrix(Test1) ;
   FreeMatrix(Test2) ;
   FreeMatrix(Answer) ;


   /*** Dense Matrix Test ***/
   printf("Using Dense Operations...\n") ;

   /* Read in the test files */
   DTest1 = LoadDense("rand1") ;
   DTest2 = LoadDense("rand2") ;
   assert(DTest1 != NULL && DTest2 != NULL) ; 

   /* Test Multiplication */
   DAnswer = MultiplyDense(DTest1, DTest2) ;
   assert(DAnswer != NULL) ;
   result = StoreDense("temp2", DAnswer) ;
   assert(result != 0) ;


   /*** Consistency Check ***/
   printf("Checking the two answers\n") ;

   Check = LoadDense("temp") ;
   assert(Check != NULL) ;
   comp = CompareDense(DAnswer, Check) ;
   printf("Absolute Difference = %lf\n", comp) ;

   FreeDense(DTest1) ;
   FreeDense(DTest2) ;
   FreeDense(DAnswer) ;
   FreeDense(Check) ;
}
