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