1 #pragma warning (disable: 4786)
2 
3 #include <string>
4 #include <iostream>
5 #include <fstream>
6 #include <xparam.h>
7 
8 using namespace std;
9 using namespace xParam;
10 
main(int argc,char * argv[])11 int main(int argc, char* argv[])
12 {
13   int d=2;
14 	  // Thrown errors:
15 	  // no name found in "name ! desc" string
16   try {
17 
18     xparam_init();
19 
20     ParamSet ps;
21     ps << iParamVar(d,"#4652afg");
22   }
23   catch(Error e) {
24     cout << "Got following error - " << endl << e.what() << endl;
25   }
26   try {
27     ParamSet ps;
28     ps << iParamVar(d,"   !afg");
29   }
30   catch(Error e) {
31     cout << "Got following error - " << endl << e.what() << endl;
32   }
33 	  // first char in name is digit
34   try {
35     ParamSet ps;
36     ps << iParamVar(d," 3rdfromleft! third from left ");
37   }
38   catch(Error e) {
39     cout << "Got following error - " << endl << e.what() << endl;
40   }
41 	  // no ! before description
42   try {
43     ParamSet ps;
44     ps << iParamVar(d,"hello there!");
45   }
46   catch(Error e) {
47     cout << "Got following error - " << endl << e.what() << endl;
48   }
49 	  // inputting a non-input parameter
50   try {
51     ParamSet ps;
52     ps << oParamVar(d,"d");
53     const char* input[]={"test1","d=7"};
54     ps.input(2,input);
55   }
56   catch(Error e) {
57     cout << "Got following error - " << endl << e.what() << endl;
58   }
59 	  // inputting an undefined parameter
60   try {
61     ParamSet ps;
62     ps << iParamVar(d,"d");
63     ps.input("e=7");
64   }
65   catch(Error e) {
66     cout << "Got following error - " << endl << e.what() << endl;
67   }
68 	  // error parsing value
69   // This is only an example of parser errors. Extensive tests will follow.
70   try {
71     ParamSet ps;
72     ps << iParamVar(d,"d");
73     const char* input[]={"test1","d=int(7"};
74     ps.input(2,input);
75   }
76   catch(Error e) {
77     cout << "Got following error - " << endl << e.what() << endl;
78   }
79 	  // file not found
80   try {
81     ParamSet ps;
82     ps << iParamVar(d,"d");
83     const char* input[]={"test1","@non_existent_file"};
84     ps.input(2,input);
85   }
86   catch(Error e) {
87     cout << "Got following error - " << endl << e.what() << endl;
88   }
89 	  // Access of unregistered type
90   try {
91     ParamSet ps;
92     ps << iParamVar(d,"d");
93     const char* input[]={"test1","d=non_existent_class()"};
94     ps.input(2,input);
95   }
96   catch(Error e) {
97     cout << "Got following error - " << endl << e.what() << endl;
98   }
99   try {
100     ParamSet ps;
101     ps << iParamVar(d,"d");
102     const char* input[]={"test1","d=unregistered_type()"};
103     ps.input(2,input);
104   }
105   catch(Error e) {
106     cout << "Got following error - " << endl << e.what() << endl;
107   }
108 	  // Integer too large
109   try {
110     ParamSet ps;
111     ps << iParamVar(d,"d");
112     const char* input[]={"test1","d=76542979874298718347"};
113     ps.input(2,input);
114   }
115   catch(Error e) {
116     cout << "Got following error - " << endl << e.what() << endl;
117   }
118 	  // Integer too large
119   try {
120     ParamSet ps;
121     char ch;
122     ps << iParamVar(ch,"ch");
123     const char* input[]={"test1","ch=3000000000"};
124     ps.input(2,input);
125     cout << "ch: " << Val(ch) << endl;
126   }
127   catch(Error e) {
128     cout << "Got following error - " << endl << e.what() << endl;
129   }
130 	  // Integer too large, but can still fit an unsigned long
131   try {
132     ParamSet ps;
133     ps << iParamVar(d,"d");
134     const char* input[]={"test1","d=3000000000"};
135     ps.input(2,input);
136     cout << "d: " << Val(d) << endl;
137   }
138   catch(Error e) {
139     cout << "Got following error - " << endl << e.what() << endl;
140   }
141 	  // no ctor found <- no matching path in "create"
142 	  //   (should this be an assert?)
143 	  // no conversion path found
144   try {
145     ParamSet ps;
146     string s;
147     ps << iParamVar(s,"s");
148     const char* input[]={"test1","s=duck()"};
149     ps.input(2,input);
150   }
151   catch(Error e) {
152     cout << "Got following error - " << endl << e.what() << endl;
153   }
154   try {
155     ParamSet ps;
156     ps << iParamVar(d,"d");
157     const char* input[]={"test1","d=duckling()"};
158     ps.input(2,input);
159   }
160   catch(Error e) {
161     cout << "Got following error - " << endl << e.what() << endl;
162   }
163   return 0;
164 }
165