// $Id$ // // Copyright (C) 2001-2006 Rational Discovery LLC // // @@ All Rights Reserved @@ // #include #include #include #include #include "BitVects.h" #include "BitOps.h" #include "BitVectUtils.h" #include #include "DiscreteValueVect.h" #include #include #include using namespace std; template< typename T > inline void TXTMSG(const char *__a__,T __b__){ BOOST_LOG(rdInfoLog) << (__a__) << " " << (__b__) << std::endl; } template void Test(T arg){ T t1(20); TXTMSG("Set 10:",t1.SetBit(10)); TXTMSG("Set 11:",t1.SetBit(11)); TXTMSG("Set 14:",t1.SetBit(14)); TXTMSG("Set 10:",t1.SetBit(10)); TXTMSG("Get 14:",t1.GetBit(14)); TXTMSG("Num:",t1.GetNumBits()); TXTMSG("NumOn:",t1.GetNumOnBits()); TXTMSG("NumOff:",t1.GetNumOffBits()); IntVect onBits; t1.GetOnBits(onBits); std::copy(onBits.begin(),onBits.end(),std::ostream_iterator(std::cout,", ")); std::cout << std::endl; T t2(t1); //onBits = t2.GetOnBits(); TXTMSG("t2[19]:",t2[19]); TXTMSG("t2[14]:",t2[14]); t2 = t1; //onBits = t2.GetOnBits(); TXTMSG("t2[19]:",t2[19]); t2.UnSetBit(14); TXTMSG("t2[14]:",t2[14]); t2.SetBit(15); t2.SetBit(17); cout << "t1: "; t1.GetOnBits(onBits); std::copy(onBits.begin(),onBits.end(),std::ostream_iterator(std::cout,", ")); std::cout << std::endl; cout << "t2: "; t2.GetOnBits(onBits); std::copy(onBits.begin(),onBits.end(),std::ostream_iterator(std::cout,", ")); std::cout << std::endl; cout << "t1|t2: "; T t3=t1|t2; t3.GetOnBits(onBits); std::copy(onBits.begin(),onBits.end(),std::ostream_iterator(std::cout,", ")); std::cout << std::endl; cout << "t1&t2: "; t3=t1 & t2; t3.GetOnBits(onBits); std::copy(onBits.begin(),onBits.end(),std::ostream_iterator(std::cout,", ")); std::cout << std::endl; cout << "t1^t2: "; t3=t1 ^ t2; t3.GetOnBits(onBits); std::copy(onBits.begin(),onBits.end(),std::ostream_iterator(std::cout,", ")); std::cout << std::endl; cout << "~t1: "; t3= ~t1; t3.GetOnBits(onBits); std::copy(onBits.begin(),onBits.end(),std::ostream_iterator(std::cout,", ")); std::cout << std::endl; try{ t3.GetBit(4000); } catch (IndexErrorException) { cout << " except " << endl; } catch (...) { cout << " ERROR EXCEPT " << endl; } T t4(t1.ToString()); cout << "tan(t1,t4): " << TanimotoSimilarity(t1,t4) << endl; T *t5 = FoldFingerprint(t1); TEST_ASSERT(t5->GetNumBits() == t1.GetNumBits()/2); TEST_ASSERT(t5->GetBit(0)); TEST_ASSERT(t5->GetBit(1)); TEST_ASSERT(t5->GetBit(4)); TEST_ASSERT(!t5->GetBit(2)); TEST_ASSERT(!t5->GetBit(3)); delete t5; } template void TaniTest(T &arg){ std::string fps[4] = { ".b+HHa.EgU6+ibEIr89.CpX0g8FZiXH+R0+Ps.mr6tg.2", ".b7HEa..ccc+gWEIr89.8lV8gOF3aXFFR.+Ps.mZ6lg.2", ".H+nHq2EcY09y5EIr9e.8p50h0NgiWGNx4+Hm+Gbslw.2", ".1.HHa..cUI6i5E2rO8.Op10d0NoiWGVx.+Hm.Gb6lo.2", }; double dists[] = { 1.0,0.788991,0.677165,0.686957, 1.0,0.578125,0.591304, 1.0,0.732759, 1.0 }; int idx=0; for(int i=0;i<4;i++){ T v1(256); FromDaylightString(v1,fps[i]); for(int j=i;j<4;j++){ T v2(256); FromDaylightString(v2,fps[j]); double tani=TanimotoSimilarity(v1,v2); TEST_ASSERT(abs(tani-dists[idx])<1e-4); idx++; } } } template void ProbeTest(T &arg){ int sz=1000; T t1(sz),t2(sz); for(int i=0;i