Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

CoinDenseVectorTest.cpp

00001 // Copyright (C) 2000, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #if defined(_MSC_VER)
00004 // Turn off compiler warning about long names
00005 #  pragma warning(disable:4786)
00006 #endif
00007 
00008 #include <cassert>
00009 
00010 #include "CoinDenseVector.hpp"
00011 
00012 #ifdef NDEBUG
00013 #undef NDEBUG
00014 #endif
00015 
00016 //--------------------------------------------------------------------------
00017 template <typename T> void
00018 CoinDenseVectorUnitTest(T dummy)
00019 {
00020 
00021   // Test default constructor
00022   {
00023     CoinDenseVector<T> r;
00024     assert( r.getElements() == 0 );
00025     assert( r.getNumElements() == 0 );
00026   }
00027     const int ne = 4;
00028     T el[ne] = { 10, 40, 1, 50 };
00029 
00030     // Create vector and set its value
00031     CoinDenseVector<T> r(ne,el);
00032 
00033     // access each element
00034     assert( r.getElements()[0]==10. );
00035     assert( r.getElements()[1]==40. );
00036     assert( r.getElements()[2]== 1. );
00037     assert( r.getElements()[3]==50. );
00038 
00039     // Test norms etc
00040     assert( r.sum() == 10.+40.+1.+50. );
00041     assert( r.oneNorm() == 101.0);
00042     assert( r.twoNorm() == sqrt(100.0 + 1600. + 1. + 2500.));
00043     assert( r.infNorm() == 50.);
00044     assert(r[0]+r[1]+r[2]+r[3]==101.);
00045 
00046     // Test for equality
00047     CoinDenseVector<T> r1;
00048     r1=r;
00049     assert( r1.getElements()[0]==10. );
00050     assert( r1.getElements()[1]==40. );
00051     assert( r1.getElements()[2]== 1. );
00052     assert( r1.getElements()[3]==50. );
00053 
00054     // Add dense vectors.
00055     CoinDenseVector<T> add = r + r1;
00056     assert( add[0] == 10.+10. );
00057     assert( add[1] == 40.+40. );
00058     assert( add[2] ==  1.+ 1. );
00059     assert( add[3] == 50.+50. );
00060 
00061     // Similarly for copy constructor and subtraction and multiplication
00062     CoinDenseVector<T> r2(r);
00063     CoinDenseVector<T> diff = r - r2;
00064     assert(diff.sum() == 0.0);
00065 
00066     CoinDenseVector<T> mult = r * r2;
00067     assert( mult[0] == 10.*10. );
00068     assert( mult[1] == 40.*40. );
00069     assert( mult[2] ==  1.* 1. );
00070     assert( mult[3] == 50.*50. );
00071 
00072    // and division.
00073     CoinDenseVector<T> div = r / r1;
00074     assert(div.sum() == 4.0);
00075 
00076 }
00077 
00078 template void CoinDenseVectorUnitTest<float>(float);
00079 template void CoinDenseVectorUnitTest<double>(double);
00080 //template void CoinDenseVectorUnitTest<int>(int);

Generated on Wed Dec 3 14:34:16 2003 for Coin by doxygen 1.3.5