⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blastest.cpp

📁 Gaussian Mixture Algorithm
💻 CPP
字号:
#include "BlasTest.h"using namespace ebl;void BlasTest::setUp() {}void BlasTest::tearDown() {}void BlasTest::test_idx_min_max() {  Idx<double> m2(2, 2);  idx_clear(m2);  m2.set(0.0, 0, 0);  m2.set(42.0, 0, 1);  m2.set(1.0, 1, 0);  m2.set(-42.0, 1, 1);  CPPUNIT_ASSERT(idx_max(m2) == 42.0);  CPPUNIT_ASSERT(idx_min(m2) == -42.0);}void BlasTest::test_idx_sums() {		Idx<double> m(3, 4);		Idx<double> m0;		Idx<unsigned char> mc(3, 4);		Idx<unsigned char> mc0;		idx_clear(m);		idx_clear(m0);		idx_clear(mc);		idx_clear(mc0);		double i;		i = -1;		idx_aloop2(lm, m, double, lmc, mc, unsigned char) {			*lm = i;			*lmc = (unsigned char) i;			i++;		}		//m.printElems();		//mc.printElems();		CPPUNIT_ASSERT(idx_sum(m) == 54);		CPPUNIT_ASSERT(idx_sumsqr(m) == 386);		CPPUNIT_ASSERT(idx_sumacc(m, m0) == 54);		CPPUNIT_ASSERT(m0.get() == 54);		CPPUNIT_ASSERT(idx_sumacc(m, m0) == 108);		CPPUNIT_ASSERT(m0.get() == 108);		// Testing non double or float versions.		CPPUNIT_ASSERT(idx_sumacc(mc, mc0) == 54);		CPPUNIT_ASSERT(mc0.get() == 54);		CPPUNIT_ASSERT(idx_sumacc(mc, mc0) == 108);		CPPUNIT_ASSERT(mc0.get() == 108);		// TODO: add tests for non contiguous idx and order of 1}void BlasTest::test_idx_sortdown() {	Idx<double> m(5);	Idx<unsigned char> mc(5);	double i;	i = 1;	idx_aloop2(lm, m, double, lmc, mc, unsigned char) {		*lm = i;		*lmc = 5 - (unsigned char) i;		i++;	}//	m.printElems();//	mc.printElems();	idx_sortdown(m, mc);//	m.printElems();//	mc.printElems();	CPPUNIT_ASSERT_EQUAL((double) 5, m.get(0));	CPPUNIT_ASSERT_EQUAL((double) 4, m.get(1));	CPPUNIT_ASSERT_EQUAL((double) 3, m.get(2));	CPPUNIT_ASSERT_EQUAL((double) 2, m.get(3));	CPPUNIT_ASSERT_EQUAL((double) 1, m.get(4));	CPPUNIT_ASSERT_EQUAL((unsigned char) 0, mc.get(0));	CPPUNIT_ASSERT_EQUAL((unsigned char) 1, mc.get(1));	CPPUNIT_ASSERT_EQUAL((unsigned char) 2, mc.get(2));	CPPUNIT_ASSERT_EQUAL((unsigned char) 3, mc.get(3));	CPPUNIT_ASSERT_EQUAL((unsigned char) 4, mc.get(4));}void BlasTest::test_idx_sqrdist() {	Idx<double> m(5);	Idx<double> mc(5);	double i;	i = 1;	idx_aloop2(lm, m, double, lmc, mc, double) {		*lm = i;		*lmc = 5.0 - i;		i++;	}	//m.printElems();	//mc.printElems();	i = idx_sqrdist(m, mc);	//cout << "sqrdist: " << i << endl;	CPPUNIT_ASSERT_EQUAL((double) 45, i);}void BlasTest::test_idx_exp() {	  Idx<double> m2(2, 2);	  idx_clear(m2);	  m2.set(0.0, 0, 0);	  m2.set(1.0, 0, 1);	  m2.set(-1, 1, 0);	  m2.set(log(2), 1, 1);	  idx_exp(m2);	  CPPUNIT_ASSERT(m2.get(0,0) == 1);	  CPPUNIT_ASSERT(m2.get(0,1) == exp(1));	  CPPUNIT_ASSERT(m2.get(1,0) == 1/exp(1));	  CPPUNIT_ASSERT(m2.get(1,1) == 2);}void BlasTest::test_idx_m2oversample() {	Idx<double> m(2, 2);	Idx<double> o(4, 4);	m.set(1.0, 0, 0);	m.set(2.0, 0, 1);	m.set(3.0, 1, 0);	m.set(4.0, 1, 1);	//m.printElems(); cout << endl;	idx_m2oversample(m, 2, 2, o);	//o.printElems(); cout << endl;	CPPUNIT_ASSERT_EQUAL(1.0, o.get(0, 0));	CPPUNIT_ASSERT_EQUAL(1.0, o.get(0, 1));	CPPUNIT_ASSERT_EQUAL(2.0, o.get(0, 2));	CPPUNIT_ASSERT_EQUAL(2.0, o.get(0, 3));	CPPUNIT_ASSERT_EQUAL(1.0, o.get(1, 0));	CPPUNIT_ASSERT_EQUAL(1.0, o.get(1, 1));	CPPUNIT_ASSERT_EQUAL(2.0, o.get(1, 2));	CPPUNIT_ASSERT_EQUAL(2.0, o.get(1, 3));	CPPUNIT_ASSERT_EQUAL(3.0, o.get(2, 0));	CPPUNIT_ASSERT_EQUAL(3.0, o.get(2, 1));	CPPUNIT_ASSERT_EQUAL(4.0, o.get(2, 2));	CPPUNIT_ASSERT_EQUAL(4.0, o.get(2, 3));	CPPUNIT_ASSERT_EQUAL(3.0, o.get(3, 0));	CPPUNIT_ASSERT_EQUAL(3.0, o.get(3, 1));	CPPUNIT_ASSERT_EQUAL(4.0, o.get(3, 2));	CPPUNIT_ASSERT_EQUAL(4.0, o.get(3, 3));}void BlasTest::test_idx_m2squdotm1() {	Idx<double> m1(2, 2);	Idx<double> m2(2);	Idx<double> m3(2);	m1.set(2.0, 0, 0);	m1.set(2.0, 0, 1);	m1.set(3.0, 1, 0);	m1.set(3.0, 1, 1);	m2.set(1.0, 0);	m2.set(2.0, 1);	idx_clear(m3);	//m1.printElems(); cout << endl;	//m2.printElems(); cout << endl;	idx_m2squdotm1(m1, m2, m3);	//m3.printElems(); cout << endl;	CPPUNIT_ASSERT_EQUAL(12.0, m3.get(0));	CPPUNIT_ASSERT_EQUAL(27.0, m3.get(1));}void BlasTest::test_idx_m2extm2acc() {	Idx<double> m1(2, 2);	Idx<double> m2(2, 2);	Idx<double> m3(2, 2, 2, 2);	m1 = m1.transpose(0, 1);	m2 = m2.transpose(0, 1);	m3 = m3.transpose(1, 2);	m1.set(1.0, 0, 0);	m1.set(2.0, 0, 1);	m1.set(3.0, 1, 0);	m1.set(4.0, 1, 1);	idx_fill(m2, 2.0);	idx_fill(m3, 1.0);//	m1.printElems(); cout << endl;//	m2.printElems(); cout << endl;//	m3.printElems(); cout << endl;	idx_m2extm2acc(m1, m2, m3);//	m3.printElems(); cout << endl;	CPPUNIT_ASSERT_EQUAL(3.0, m3.get(0, 0, 0, 0));	CPPUNIT_ASSERT_EQUAL(3.0, m3.get(0, 0, 0, 1));	CPPUNIT_ASSERT_EQUAL(3.0, m3.get(0, 0, 1, 0));	CPPUNIT_ASSERT_EQUAL(3.0, m3.get(0, 0, 1, 1));	CPPUNIT_ASSERT_EQUAL(5.0, m3.get(0, 1, 0, 0));	CPPUNIT_ASSERT_EQUAL(5.0, m3.get(0, 1, 0, 1));	CPPUNIT_ASSERT_EQUAL(5.0, m3.get(0, 1, 1, 0));	CPPUNIT_ASSERT_EQUAL(5.0, m3.get(0, 1, 1, 1));	CPPUNIT_ASSERT_EQUAL(7.0, m3.get(1, 0, 0, 0));	CPPUNIT_ASSERT_EQUAL(7.0, m3.get(1, 0, 0, 1));	CPPUNIT_ASSERT_EQUAL(7.0, m3.get(1, 0, 1, 0));	CPPUNIT_ASSERT_EQUAL(7.0, m3.get(1, 0, 1, 1));	CPPUNIT_ASSERT_EQUAL(9.0, m3.get(1, 1, 0, 0));	CPPUNIT_ASSERT_EQUAL(9.0, m3.get(1, 1, 0, 1));	CPPUNIT_ASSERT_EQUAL(9.0, m3.get(1, 1, 1, 0));	CPPUNIT_ASSERT_EQUAL(9.0, m3.get(1, 1, 1, 1));}void BlasTest::test_idx_copy(){	Idx<double> m1(3, 5, 4);	Idx<double> m2(3, 5, 4);	Idx<float> m3(3, 5, 4);	Idx<intg> m4(3, 5, 4);	Idx<ubyte> m5(3, 5, 4);	dseed(2);	idx_bloop1(i, m1, double){		idx_bloop1(ii, i, double){			idx_bloop1(iii, ii, double){				iii->set(255*drand());			}		}	}	idx_copy(m1, m2);	for(int i = 0; i < 3; i++)		for(int j = 0; j < 5; j++)			for(int k = 0; k < 4; k++)				CPPUNIT_ASSERT_EQUAL(m1.get(i,j,k), m2.get(i,j,k));	idx_copy(m1, m3);	for(int i = 0; i < 3; i++)		for(int j = 0; j < 5; j++)			for(int k = 0; k < 4; k++)				CPPUNIT_ASSERT_EQUAL((float)m1.get(i,j,k), m3.get(i,j,k));	idx_copy(m1, m4);	for(int i = 0; i < 3; i++)		for(int j = 0; j < 5; j++)			for(int k = 0; k < 4; k++)				CPPUNIT_ASSERT_EQUAL((int)floor(m1.get(i,j,k)), (int)m4.get(i,j,k));	idx_copy(m1, m5);	for(int i = 0; i < 3; i++)		for(int j = 0; j < 5; j++)			for(int k = 0; k < 4; k++)				CPPUNIT_ASSERT_EQUAL((ubyte)floor(m1.get(i,j,k)), m5.get(i,j,k));	void* m6 = (void*) new Idx<double>(3, 5, 4);	idx_copy(m1, *(static_cast<Idx<double>*>(m6)));	for(int i = 0; i < 3; i++)		for(int j = 0; j < 5; j++)			for(int k = 0; k < 4; k++)				CPPUNIT_ASSERT_EQUAL(m1.get(i,j,k), static_cast<Idx<double>*>(m6)->get(i,j,k));	Idx<ubyte> m7(3, 5, 4);	idx_copy(*(static_cast<Idx<double>*>(m6)), m7);	for(int i = 0; i < 3; i++)		for(int j = 0; j < 5; j++)			for(int k = 0; k < 4; k++)				CPPUNIT_ASSERT_EQUAL(m7.get(i,j,k), (ubyte) static_cast<Idx<double>*>(m6)->get(i,j,k));	Idx<double>m8(3, 5, 2);	m8 = m1.narrow(2,2,2);	Idx<ubyte>m9(3, 5, 2);	idx_clear(m9);	idx_copy(m8, m9);//	m8.printElems();//	printf("\n ********************************************* \n");//	m9.printElems();	for(int i = 0; i < 3; i++)		for(int j = 0; j < 5; j++)			for(int k = 0; k < 2; k++)				CPPUNIT_ASSERT_EQUAL((ubyte)m8.get(i,j,k), m9.get(i,j,k));	Idx<ubyte>m10(3, 5, 4);	Idx<ubyte>m11(3, 5, 2);	m11 = m10.narrow(2, 2, 2);	idx_copy(m8, m11);	for(int i = 0; i < 3; i++)		for(int j = 0; j < 5; j++)			for(int k = 0; k < 2; k++)				CPPUNIT_ASSERT_EQUAL((ubyte)m8.get(i,j,k), m11.get(i,j,k));	delete static_cast<Idx<double>*>(m6);}void BlasTest::test_idx_copy2(){	Idx<double> m1(5, 3, 4);	dseed(2);	idx_bloop1(i, m1, double){		idx_bloop1(ii, i, double){			idx_bloop1(iii, ii, double){				iii->set(255*drand());			}		}	}	Idx<double>m8(5, 3, 2);	m8 = m1.narrow(2,2,0);	Idx<ubyte>m9(5, 3, 2);	idx_copy(m8, m9);	//m8.printElems();	//printf("\n ********************************************* \n");	//m9.printElems();	for(int i = 0; i < 5; i++)		for(int j = 0; j < 3; j++)			for(int k = 0; k < 2; k++)				CPPUNIT_ASSERT_EQUAL((ubyte)m8.get(i,j,k), m9.get(i,j,k));}void BlasTest::test_idx_abs() {	{	  Idx<double> m2(20, 20);	  Idx<double> m2a(20, 20);	  idx_clear(m2);	  idx_clear(m2a);	  dseed(2);	  idx_bloop1(i,m2,double){		  idx_bloop1(ii,i,double){			  ii->set(drand(-2,2));		  }	  }	  idx_abs(m2,m2a);	  idx_bloop2(i,m2,double,j,m2a,double){		  idx_bloop2(ii,i,double,jj,j,double){			  if(ii->get() < 0.0){				  CPPUNIT_ASSERT(-(ii->get()) == jj->get());			  }else{				  CPPUNIT_ASSERT(ii->get() == jj->get());			  }		  }	  }	}	{	  // repeat for int	  Idx<int> m2(20, 20);	  Idx<int> m2a(20, 20);	  idx_clear(m2);	  idx_clear(m2a);	  dseed(2);	  idx_bloop1(i,m2,int){		  idx_bloop1(ii,i,int){		    ii->set((int)drand(-2,2));		  }	  }	  idx_abs(m2,m2a);	  idx_bloop2(i,m2,int,j,m2a,int){		  idx_bloop2(ii,i,int,jj,j,int){			  if(ii->get() < 0.0){				  CPPUNIT_ASSERT(-(ii->get()) == jj->get());			  }else{				  CPPUNIT_ASSERT(ii->get() == jj->get());			  }		  }	  }	}}void BlasTest::test_huge_vec() {  // this would not run on many systems  // disable until a cmake trick is implemented//   intg size = 0;//   if (LONG_MAX > INT_MAX){//     size = INT_MAX/2; // for now leave like this, I can't make things run on humair now.//   }//   else{//     size = INT_MAX/2;//   }//   Idx<double> hv(size);//   idx_fill(hv, 1.0);//   // dot with itself//   double dd = idx_dot(hv,hv);//   CPPUNIT_ASSERT((int)dd == hv.footprint());}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -