test.sccp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. #!/bin/bash
  2. /*/../bin/ls > /dev/null
  3. # BEGIN BASH SCRIPT
  4. printf "//" | cat - $0 | g++ -g -liglxml -ligl -ltinyxml2 -I/opt/local/include/eigen3 -L$LIBIGL/external/tinyxml2 -I$LIBIGL/external/tinyxml2 -I$LIBIGL/include -L$LIBIGL/lib -o .main -x c++ - && ./.main $@
  5. rm -f .main
  6. # END BASH SCRIPT
  7. exit
  8. */
  9. #include <igl/xml/XMLSerializer.h>
  10. /*
  11. Use the following lines to run the XMLSerializer tests:
  12. igl::XMLSerializerTest* test = new igl::XMLSerializerTest();
  13. bool success = test->Test();
  14. delete test;
  15. */
  16. bool igl::XMLSerializerTest::Test()
  17. {
  18. // test vars 0
  19. char testChar0 = 'a';
  20. char* testCharArray0 = "testCharArray0";
  21. std::string testString0 = "testString0";
  22. bool testBool0 = true;
  23. unsigned int testUnsigned0 = 13;
  24. int testInt0 = 1000;
  25. float testFloat0 = 0.00001f;
  26. double testDouble0 = 0.01000000005;
  27. //std::array<float,2> testArray0 = {{0.001f,1.001f}};
  28. std::pair<int,bool> testPair0;
  29. testPair0.first = 5;
  30. testPair0.second = true;
  31. std::vector<int> testVector0;
  32. testVector0.push_back(1);
  33. testVector0.push_back(2);
  34. testVector0.push_back(3);
  35. Eigen::Matrix3i testDenseMatrix0;
  36. //testDenseMatrix0 = Eigen::Matrix3i::Identity();
  37. Eigen::SparseMatrix<double> testSparseMatrix0(3,3);
  38. std::vector<Eigen::Triplet<double> > triplets;
  39. triplets.push_back(Eigen::Triplet<double>(0,0,1));
  40. triplets.push_back(Eigen::Triplet<double>(1,1,2));
  41. triplets.push_back(Eigen::Triplet<double>(2,2,3));
  42. testSparseMatrix0.setFromTriplets(triplets.begin(),triplets.end());
  43. igl::XMLSerializerTest* testObject0 = new igl::XMLSerializerTest();
  44. std::vector<std::pair<int,bool>*> testComplex10;
  45. testComplex10.push_back(&testPair0);
  46. testComplex10.push_back(&testPair0);
  47. std::vector<igl::XMLSerializerTest*> testComplex20;
  48. testComplex20.push_back(testObject0);
  49. testComplex20.push_back(testObject0);
  50. // test vars 1
  51. char testChar1 = 'b';
  52. char* testCharArray1 = "testCharArray1";
  53. std::string testString1 = "testString1";
  54. bool testBool1 = false;
  55. unsigned int testUnsigned1 = 12;
  56. int testInt1 = -1000;
  57. float testFloat1 = -0.00001f;
  58. double testDouble1 = -0.000000000001;
  59. //std::array<float,2> testArray1 = {{-0.001f,-1.001f}};
  60. std::pair<int,bool> testPair1;
  61. testPair1.first = -5;
  62. testPair1.second = false;
  63. std::vector<int> testVector1;
  64. testVector1.push_back(-1);
  65. testVector1.push_back(-2);
  66. testVector1.push_back(-3);
  67. Eigen::Matrix3i testDenseMatrix1;
  68. //testDenseMatrix1 = Eigen::Matrix3i::Identity();
  69. //testDenseMatrix1 *= 2;
  70. Eigen::SparseMatrix<double> testSparseMatrix1(3,3);
  71. triplets.clear();
  72. triplets.push_back(Eigen::Triplet<double>(0,0,-1));
  73. triplets.push_back(Eigen::Triplet<double>(1,1,-2));
  74. triplets.push_back(Eigen::Triplet<double>(2,2,-3));
  75. testSparseMatrix1.setFromTriplets(triplets.begin(),triplets.end());
  76. igl::XMLSerializerTest* testObject1 = new igl::XMLSerializerTest();
  77. testObject1->testInt = 3;
  78. testObject1->testVector.clear();
  79. std::vector<std::pair<int,bool>*> testComplex11;
  80. testComplex11.push_back(&testPair1);
  81. testComplex11.push_back(&testPair1);
  82. std::vector<igl::XMLSerializerTest*> testComplex21;
  83. testComplex21.push_back(testObject1);
  84. testComplex21.push_back(testObject1);
  85. // test Serializer
  86. bool testResult = true;
  87. // test static functions
  88. // check static updating
  89. int testInt = 5;
  90. testResult &= igl::XMLSerializer::SaveObject(testInt0,"test.xml");
  91. testResult &= igl::XMLSerializer::SaveObject(testChar0,"testChar","test","test.xml",false);
  92. testResult &= igl::XMLSerializer::LoadObject(testInt,"test.xml");
  93. testResult &= testInt0 == testInt;
  94. // check static overwriting
  95. testInt = 3;
  96. testResult &= igl::XMLSerializer::SaveObject(testInt0,"test.xml");
  97. testResult &= igl::XMLSerializer::SaveObject(testChar0,"testChar","test","test.xml",true);
  98. testResult &= igl::XMLSerializer::LoadObject(testInt,"test.xml") == false;
  99. testResult &= testInt0 != testInt;
  100. // check static based type saving
  101. testResult &= igl::XMLSerializer::SaveObject(testChar0,"testChar","test0","test.xml",true);
  102. testResult &= igl::XMLSerializer::SaveObject(testCharArray0,"testCharArray","test0","test.xml",false);
  103. testResult &= igl::XMLSerializer::SaveObject(testString0,"testString","test0","test.xml",false);
  104. testResult &= igl::XMLSerializer::SaveObject(testBool0,"testBool","test0","test.xml",false);
  105. testResult &= igl::XMLSerializer::SaveObject(testUnsigned0,"testUnsigned","test0","test.xml",false);
  106. testResult &= igl::XMLSerializer::SaveObject(testInt0,"testInt","test0","test.xml",false);
  107. testResult &= igl::XMLSerializer::SaveObject(testFloat0,"testFloat","test0","test.xml",false);
  108. testResult &= igl::XMLSerializer::SaveObject(testDouble0,"testDouble","test0","test.xml",false);
  109. //testResult &= igl::XMLSerializer::SaveObject(testArray0,"testArray","test1","test.xml",false);
  110. testResult &= igl::XMLSerializer::SaveObject(testPair0,"testPair","test1","test.xml",false);
  111. testResult &= igl::XMLSerializer::SaveObject(testVector0,"testVector","test1","test.xml",false);
  112. testResult &= igl::XMLSerializer::SaveObject(testDenseMatrix0,"testDense","test1","test.xml",false);
  113. testResult &= igl::XMLSerializer::SaveObject(testSparseMatrix0,"testSparse","test1","test.xml",false);
  114. testResult &= igl::XMLSerializer::SaveObject(testObject0,"testObject","test1","test.xml",false);
  115. testResult &= igl::XMLSerializer::SaveObject(testComplex10,"testComplex1","test1","test.xml",false);
  116. testResult &= igl::XMLSerializer::SaveObject(testComplex20,"testComplex2","test1","test.xml",false);
  117. testResult &= igl::XMLSerializer::LoadObject(testChar1,"testChar","test0","test.xml");
  118. testResult &= igl::XMLSerializer::LoadObject(testCharArray1,"testCharArray","test0","test.xml");
  119. testResult &= igl::XMLSerializer::LoadObject(testString1,"testString","test0","test.xml");
  120. testResult &= igl::XMLSerializer::LoadObject(testBool1,"testBool","test0","test.xml");
  121. testResult &= igl::XMLSerializer::LoadObject(testUnsigned1,"testUnsigned","test0","test.xml");
  122. testResult &= igl::XMLSerializer::LoadObject(testInt1,"testInt","test0","test.xml");
  123. testResult &= igl::XMLSerializer::LoadObject(testFloat1,"testFloat","test0","test.xml");
  124. testResult &= igl::XMLSerializer::LoadObject(testDouble1,"testDouble","test0","test.xml");
  125. //testResult &= igl::XMLSerializer::LoadObject(testArray1,"testArray","test1","test.xml");
  126. testResult &= igl::XMLSerializer::LoadObject(testPair1,"testPair","test1","test.xml");
  127. testResult &= igl::XMLSerializer::LoadObject(testVector1,"testVector","test1","test.xml");
  128. testResult &= igl::XMLSerializer::LoadObject(testDenseMatrix1,"testDense","test1","test.xml");
  129. testResult &= igl::XMLSerializer::LoadObject(testSparseMatrix1,"testSparse","test1","test.xml");
  130. testResult &= igl::XMLSerializer::LoadObject(testObject1,"testObject","test1","test.xml");
  131. testResult &= igl::XMLSerializer::LoadObject(testComplex11,"testComplex1","test1","test.xml");
  132. testResult &= igl::XMLSerializer::LoadObject(testComplex21,"testComplex2","test1","test.xml");
  133. testResult &= testChar0 == testChar1;
  134. testResult &= strcmp(testCharArray0,testCharArray1) == 0;
  135. testResult &= testString0 == testString1;
  136. testResult &= testBool0 == testBool1;
  137. testResult &= testUnsigned0 == testUnsigned1;
  138. testResult &= testInt0 == testInt1;
  139. testResult &= testFloat0 == testFloat1;
  140. testResult &= testDouble0 == testDouble1;
  141. /*for(unsigned int i=0;i<testArray0.size();i++)
  142. testResult &= testArray0[i] == testArray1[i];*/
  143. testResult &= testPair0.first == testPair1.first;
  144. testResult &= testPair0.second == testPair1.second;
  145. testResult &= testVector0.size() == testVector1.size();
  146. for(unsigned int i=0;i<testVector0.size();i++)
  147. testResult &= testVector0[i] == testVector1[i];
  148. testResult &= (testDenseMatrix0-testDenseMatrix1).sum() == 0;
  149. testResult &= (testSparseMatrix0-testSparseMatrix1).norm() == 0;
  150. testResult &= testObject0->testInt == testObject1->testInt;
  151. testResult &= testObject0->testVector.size() == testObject1->testVector.size();
  152. for(unsigned int i=0;i<testObject0->testVector.size();i++)
  153. testResult &= testObject0->testVector[i] == testObject1->testVector[i];
  154. testResult &= testComplex10.size() == testComplex11.size();
  155. for(unsigned int i=0;i<testComplex10.size();i++)
  156. {
  157. testResult &= testComplex10[i]->first == testComplex11[0]->first;
  158. testResult &= testComplex10[i]->second == testComplex11[0]->second;
  159. }
  160. testResult &= testComplex20.size() == testComplex21.size();
  161. for(unsigned int i=0;i<testComplex20.size();i++)
  162. {
  163. testResult &= ((XMLSerializerTest*)testComplex20[i])->testInt == ((XMLSerializerTest*)testComplex21[i])->testInt;
  164. testResult &= ((XMLSerializerTest*)testComplex20[i])->testVector.size() == ((XMLSerializerTest*)testComplex21[i])->testVector.size();
  165. for(unsigned int j=0;j<((XMLSerializerTest*)testComplex20[i])->testVector.size();j++)
  166. testResult &= ((XMLSerializerTest*)testComplex20[i])->testVector[j] == ((XMLSerializerTest*)testComplex21[i])->testVector[j];
  167. }
  168. igl::XMLSerializer* s = new igl::XMLSerializer("test0");
  169. // clear file
  170. testResult &= s->Save("test.xml",true);
  171. testResult &= s->Add(testChar0,"testChar");
  172. testResult &= s->Add(testCharArray0,"testCharArray");
  173. testResult &= s->Add(testString0,"testString");
  174. testResult &= s->Add(testBool0,"testBool");
  175. testResult &= s->Add(testUnsigned0,"testUnsigned");
  176. testResult &= s->Add(testInt0,"testInt");
  177. testResult &= s->Add(testFloat0,"testFloat");
  178. testResult &= s->Add(testDouble0,"testDouble");
  179. s->SetCurrentGroup("test1");
  180. //testResult &= s->Add(testArray0,"testArray");
  181. testResult &= s->Add(testPair0,"testPair");
  182. testResult &= s->Add(testVector0,"testVector");
  183. testResult &= s->Add(testDenseMatrix0,"testDenseMatrix");
  184. testResult &= s->Add(testSparseMatrix0,"testSparseMatrix");
  185. testResult &= s->Add(testObject0,"testObject");
  186. testResult &= s->Add(testComplex10,"testComplex1");
  187. testResult &= s->Add(testComplex20,"testComplex2");
  188. // Test single attribute save load
  189. testResult &= s->Save("testComplex2","test1","test.xml",true);
  190. testResult &= s->Load("testComplex2","test1","test.xml");
  191. testResult &= testComplex20.size() == testComplex21.size();
  192. for(unsigned int i=0;i<testComplex20.size();i++)
  193. {
  194. testResult &= ((XMLSerializerTest*)testComplex20[i])->testInt == ((XMLSerializerTest*)testComplex21[i])->testInt;
  195. testResult &= ((XMLSerializerTest*)testComplex20[i])->testVector.size() == ((XMLSerializerTest*)testComplex21[i])->testVector.size();
  196. for(unsigned int j=0;j<((XMLSerializerTest*)testComplex20[i])->testVector.size();j++)
  197. testResult &= ((XMLSerializerTest*)testComplex20[i])->testVector[j] == ((XMLSerializerTest*)testComplex21[i])->testVector[j];
  198. }
  199. // Test group save load without overriding
  200. testResult &= s->Save("test0","test.xml",false);
  201. testResult &= s->Load("test0","test.xml");
  202. testResult &= s->Load("testComplex2","test1","test.xml");
  203. testResult &= testChar0 == testChar1;
  204. testResult &= strcmp(testCharArray0,testCharArray1) == 0;
  205. testResult &= testString0 == testString1;
  206. testResult &= testBool0 == testBool1;
  207. testResult &= testUnsigned0 == testUnsigned1;
  208. testResult &= testInt0 == testInt1;
  209. testResult &= testFloat0 == testFloat1;
  210. testResult &= testDouble0 == testDouble1;
  211. // Test full serialization save load
  212. testResult &= s->Save("test.xml",true);
  213. testResult &= s->Load("test.xml");
  214. testResult &= testChar0 == testChar1;
  215. testResult &= strcmp(testCharArray0,testCharArray1) == 0;
  216. testResult &= testString0 == testString1;
  217. testResult &= testBool0 == testBool1;
  218. testResult &= testUnsigned0 == testUnsigned1;
  219. testResult &= testInt0 == testInt1;
  220. testResult &= testFloat0 == testFloat1;
  221. testResult &= testDouble0 == testDouble1;
  222. /*for(unsigned int i=0;i<testArray0.size();i++)
  223. testResult &= testArray0[i] == testArray1[i];*/
  224. testResult &= testPair0.first == testPair1.first;
  225. testResult &= testPair0.second == testPair1.second;
  226. testResult &= testVector0.size() == testVector1.size();
  227. for(unsigned int i=0;i<testVector0.size();i++)
  228. testResult &= testVector0[i] == testVector1[i];
  229. testResult &= (testDenseMatrix0-testDenseMatrix1).sum() == 0;
  230. testResult &= (testSparseMatrix0-testSparseMatrix1).norm() == 0;
  231. testResult &= testObject0->testInt == testObject1->testInt;
  232. testResult &= testObject0->testVector.size() == testObject1->testVector.size();
  233. for(unsigned int i=0;i<testObject0->testVector.size();i++)
  234. testResult &= testObject0->testVector[i] == testObject1->testVector[i];
  235. testResult &= testComplex10.size() == testComplex11.size();
  236. for(unsigned int i=0;i<testComplex10.size();i++)
  237. {
  238. testResult &= testComplex10[i]->first == testComplex11[0]->first;
  239. testResult &= testComplex10[i]->second == testComplex11[0]->second;
  240. }
  241. testResult &= testComplex20.size() == testComplex21.size();
  242. for(unsigned int i=0;i<testComplex20.size();i++)
  243. {
  244. testResult &= ((XMLSerializerTest*)testComplex20[i])->testInt == ((XMLSerializerTest*)testComplex21[i])->testInt;
  245. testResult &= ((XMLSerializerTest*)testComplex20[i])->testVector.size() == ((XMLSerializerTest*)testComplex21[i])->testVector.size();
  246. for(unsigned int j=0;j<((XMLSerializerTest*)testComplex20[i])->testVector.size();j++)
  247. testResult &= ((XMLSerializerTest*)testComplex20[i])->testVector[j] == ((XMLSerializerTest*)testComplex21[i])->testVector[j];
  248. }
  249. delete s;
  250. printf("done with test.\n");
  251. return testResult;
  252. }
  253. int main(int argc, char * argv[])
  254. {
  255. igl::XMLSerializerTest test;
  256. return !test.Test();
  257. }