1+ #include < vector>
2+ #include < iostream>
3+ #include < cmath>
4+ #include < wsjcpp_yaml.h>
5+
6+ #ifdef WINDOWS
7+ #include < direct.h>
8+ #define GetCurrentDir _getcwd
9+ #else
10+ #include < unistd.h>
11+ #define GetCurrentDir getcwd
12+ #endif
13+
14+ int main () {
15+ char buff[FILENAME_MAX];
16+ GetCurrentDir (buff, FILENAME_MAX );
17+ std::cout << " Current path: " << buff << std::endl;
18+
19+ WsjcppYaml yaml;
20+ std::string sFilepath = " ../../../../src/tests/data-tests/float-double/example.yml" ;
21+ std::string sError ;
22+ if (!yaml.loadFromFile (sFilepath , sError )) {
23+ std::cerr << " Error parsing: " << sError << std::endl;
24+ return -1 ;
25+ }
26+
27+ int ret = 0 ;
28+ if (!yaml.getRoot ()->hasElement (" double" )) {
29+ std::cerr << " Parameter 'float' not found" << std::endl;
30+ ret = -1 ;
31+ }
32+
33+ if (!yaml.getRoot ()->hasElement (" double" )) {
34+ std::cerr << " Parameter 'double' has not value" << std::endl;
35+ ret = -1 ;
36+ }
37+
38+ std::string expected_val_str = " 1.0002" ;
39+ if (yaml.getRoot ()->getElement (" double" )->getValue () != expected_val_str) {
40+ std::cerr << " Parameter 'double' has value string '" << yaml.getRoot ()->getElement (" double" )->getValue () << " ', but expected '" << expected_val_str << " '" << std::endl;
41+ ret = -1 ;
42+ }
43+
44+ double val_double = yaml[" double" ].valDouble ();
45+ double expected_double = 1 .0002f ;
46+ // std::numeric_limits<double>::epsilon() => 2.22045e-16
47+ // std::numeric_limits<float>::epsilon() => 1.19209e-07
48+ // abs(val_double - expected_double) => 3.31879e-08
49+ if (abs (val_double - expected_double) > std::numeric_limits<float >::epsilon ()) {
50+ std::cerr << " Parameter 'double' has value number '" << val_double << " ', but expected '" << expected_double << " '" << std::endl;
51+ ret = -1 ;
52+ }
53+
54+ yaml[" double" ].val (1 .0003f );
55+
56+ expected_val_str = " 1.0003" ;
57+ if (yaml.getRoot ()->getElement (" double" )->getValue () != expected_val_str) {
58+ std::cerr << " Parameter 'double' has value string '" << yaml.getRoot ()->getElement (" double" )->getValue () << " ', but expected '" << expected_val_str << " '" << std::endl;
59+ ret = -1 ;
60+ }
61+
62+ expected_double = 1 .0003f ;
63+ val_double = yaml[" double" ].valDouble ();
64+ if (abs (val_double - expected_double) > std::numeric_limits<float >::epsilon ()) {
65+ std::cerr << " Parameter 'double' has value number '" << val_double << " ', but expected '" << expected_double << " '" << std::endl;
66+ ret = -1 ;
67+ }
68+ float val_double_like_float = yaml[" double" ].valFloat ();
69+ float expected_float = 1 .0003f ;
70+ if (abs (val_double_like_float - expected_float) > std::numeric_limits<float >::epsilon ()) {
71+ std::cerr << " Parameter 'double' has value number (like float) '" << val_double_like_float << " ', but expected '" << expected_float << " '" << std::endl;
72+ ret = -1 ;
73+ }
74+
75+ // compareD("has double value is 1.0003 (double 2)", yaml["double"].valDouble(), 1.0003f);
76+
77+ return ret;
78+ }
0 commit comments