1 // This is mul/mbl/tests/test_test.cxx
2 #include <iostream>
3 #include <fstream>
4 #include <cstdlib>
5 #include <cstring>
6 #include <algorithm>
7 #ifdef _MSC_VER
8 #  include "vcl_msvc_warnings.h"
9 #endif
10 #include "vul/vul_file.h"
11 #include "vpl/vpl.h"
12 #include "vsl/vsl_binary_io.h"
13 #include <mbl/mbl_test.h>
14 #include "testlib/testlib_test.h"
15 
test_test()16 void test_test()
17 {
18   std::cout << "***********************************\n"
19            << " Testing mbl_test_save_measurement\n"
20            << "***********************************\n";
21 
22   vpl_unlink((vul_file::get_cwd()+"/mul/mbl/mbl_test_save_measurement.txt").c_str());
23   vpl_rmdir((vul_file::get_cwd()+"/mul/mbl").c_str());
24   vpl_rmdir((vul_file::get_cwd()+"/mul").c_str());
25   vpl_rmdir((vul_file::get_cwd()+"/mul").c_str());
26 
27   std::string cwd = vul_file::get_cwd();
28   std::replace(cwd.begin(), cwd.end(), '\\', '/' ); // avoid backslash control char interpretation.
29 
30   // Avoid problems with borland's putenv.
31   char buf[1024];
32   std::strncpy(buf, (std::string("MBL_TEST_SAVE_MEASUREMENT_ROOT=")+cwd).c_str(), 1023);
33   vpl_putenv(buf);
34 
35   char * envar = std::getenv("MBL_TEST_SAVE_MEASUREMENT_ROOT");
36   std::string envar2(envar?envar:"");
37   TEST ("putenv works", envar2, cwd);
38   std::cout << "Environment variable should be \"" << cwd << "\".\n"
39            << "Is \"" << envar << "\".\n\n" << std::endl;
40 
41   mbl_test_save_measurement("mul/mbl/mbl_test_save_measurement", 5.0);
42   mbl_test_save_measurement("mul/mbl/mbl_test_save_measurement", 10.0);
43 
44   std::string fn = vul_file::get_cwd()+ "/mul/mbl/mbl_test_save_measurement.txt";
45   std::cout << fn.c_str() << " contents:\n";
46 
47   {
48     std::ifstream data(fn.c_str());
49     char c;
50     while (data.get(c))
51       std::cout.put(c);
52     std::cout << "EOF *****" << std::endl;
53   }
54 
55   std::string ds, ts, bs;
56   double v;
57 
58   std::ifstream data(fn.c_str());
59   data >> ds >> ts >> bs >> v;
60   TEST("Saved value 1 correctly", v, 5.0);
61   data >> ds >> ts >> bs >> v;
62   TEST("Saved value 2 correctly", v, 10.0);
63 
64   std::cout << "**************************************\n"
65            << " Testing mbl_test_summaries_are_equal\n"
66            << "**************************************\n";
67 
68   std::string A(
69     "Some random data\n"
70     "A 4\n"
71     "B 3\n"
72     "C 2\n"
73     "AB 3\n");
74   std::string B(
75     "Some random data\n"
76     "A 4\n"
77     "B 3\n"
78     "C 2\n"
79     "AB 3\n");
80 
81   TEST("Simple case +ve", mbl_test_summaries_are_equal(A, B), true);
82   TEST("Simple case +ve", mbl_test_summaries_are_equal(A + "D 1", B + "D 2"), false);
83 
84   TEST("Simple case +ve", mbl_test_summaries_are_equal(A, B), true);
85   const char * ignore1[]={"D", nullptr };
86   TEST("Exclusions case +ve", mbl_test_summaries_are_equal(A + "D 1", B + "D 2", ignore1), true);
87   const char * ignore2[]={"^ *D", nullptr };
88   TEST("RE Exclusions case +ve", mbl_test_summaries_are_equal(A + "D 1", B + "D 2", ignore2), true);
89   TEST("RE Exclusions case -ne", mbl_test_summaries_are_equal(A + "AD 1", B + "AD 2", ignore2), false);
90 
91 
92 }
93 
94 TESTMAIN(test_test);
95