BOSS 7.0.4
BESIII Offline Software System
Loading...
Searching...
No Matches
TestValuesWin32.cpp
Go to the documentation of this file.
1// TestValues.cpp : Test XML encoding and decoding of XmlRpcValues.
2
3#define _CRTDBG_MAP_ALLOC
4#include <stdlib.h>
5#include <crtdbg.h>
6
7#include "XmlRpcValue.h"
8
9
10#include <assert.h>
11#include <iostream>
12
13
14using namespace XmlRpc;
15
16
18{
19 XmlRpcValue booleanFalse(false);
20 XmlRpcValue booleanTrue(true);
21 int offset = 0;
22 XmlRpcValue booleanFalseXml("<value><boolean>0</boolean></value>", &offset);
23 offset = 0;
24 XmlRpcValue booleanTrueXml("<value><boolean>1</boolean></value>", &offset);
25 assert(booleanFalse != booleanTrue);
26 assert(booleanFalse == booleanFalseXml);
27 assert(booleanFalse == booleanFalseXml);
28 if (booleanFalse)
29 assert(false);
30
31 if (booleanTrue)
32 assert( ! false);
33 else
34 assert(false);
35}
36
37// Int
38void testInt()
39{
40 XmlRpcValue int0(0);
41 XmlRpcValue int1(1);
42 XmlRpcValue int10(10);
43 XmlRpcValue int_1(-1);
44 int offset = 0;
45 XmlRpcValue int0Xml("<value><int>0</int></value>", &offset);
46 offset = 0;
47 XmlRpcValue int9Xml("<value><i4>9</i4></value>", &offset);
48 assert(int0 == int0Xml);
49 assert(int(int10) - int(int1) == int(int9Xml));
50 assert(9 == int(int9Xml));
51 assert(int(int10) + int(int_1) == int(int9Xml));
52}
53
55{
56 // Double
57 XmlRpcValue d(43.7);
58 int offset = 0;
59 XmlRpcValue dXml("<value><double>56.3</double></value>", &offset);
60 assert(double(d) + double(dXml) == 100.0); // questionable practice...
61}
62
64{
65 // String
66 XmlRpcValue s("Now is the time <&");
67 char csxml[] = "<value><string>Now is the time &lt;&amp;</string></value>";
68 std::string ssxml = csxml;
69 int offset = 0;
70 XmlRpcValue vscXml(csxml, &offset);
71 offset = 0;
72 XmlRpcValue vssXml(ssxml, &offset);
73 assert(s == vscXml);
74 assert(s == vssXml);
75 offset = 0;
76 XmlRpcValue fromXml(vssXml.toXml(), &offset);
77 assert(s == fromXml);
78
79 // Empty or blank strings with no <string> tags
80 std::string emptyStringXml("<value></value>");
81 offset = 0;
82 XmlRpcValue emptyStringVal1(emptyStringXml, &offset);
83 XmlRpcValue emptyStringVal2("");
84 assert(emptyStringVal1 == emptyStringVal2);
85
86 emptyStringXml = "<value> </value>";
87 offset = 0;
88 XmlRpcValue blankStringVal(emptyStringXml, &offset);
89 assert(std::string(blankStringVal) == " ");
90}
91
92
94{
95 // DateTime
96 int offset = 0;
97 XmlRpcValue dateTime("<value><dateTime.iso8601>19040101T03:12:35</dateTime.iso8601></value>", &offset);
98 struct tm &t = dateTime;
99 assert(t.tm_year == 1904 && t.tm_min == 12);
100}
101
102
103void testArray(XmlRpcValue const& d)
104{
105 // Array
106 XmlRpcValue a;
107 a.setSize(4);
108 a[0] = 1;
109 a[1] = std::string("two");
110 a[2] = 43.7;
111 a[3] = "four";
112 assert(int(a[0]) == 1);
113 assert(a[2] == d);
114
115 char csaXml[] =
116 "<value><array>\n"
117 " <data>\n"
118 " <value><i4>1</i4></value> \n"
119 " <value> <string>two</string></value>\n"
120 " <value><double>43.7</double></value>\n"
121 " <value>four</value>\n"
122 " </data>\n"
123 "</array></value>";
124
125 int offset = 0;
126 XmlRpcValue aXml(csaXml, &offset);
127 assert(a == aXml);
128}
129
131{
132 // Struct
133 XmlRpcValue struct1;
134 struct1["i4"] = 1;
135 struct1["str"] = "two";
136 struct1["d"] = 43.7;
137
138 XmlRpcValue a;
139 a.setSize(4);
140 a[0] = 1;
141 a[1] = std::string("two");
142 a[2] = 43.7;
143 a[3] = "four";
144
145 assert(struct1["d"] == a[2]);
146
147 char csStructXml[] =
148 "<value><struct>\n"
149 " <member>\n"
150 " <name>i4</name> \n"
151 " <value><i4>1</i4></value> \n"
152 " </member>\n"
153 " <member>\n"
154 " <name>d</name> \n"
155 " <value><double>43.7</double></value>\n"
156 " </member>\n"
157 " <member>\n"
158 " <name>str</name> \n"
159 " <value> <string>two</string></value>\n"
160 " </member>\n"
161 "</struct></value>";
162
163 int offset = 0;
164 XmlRpcValue structXml(csStructXml, &offset);
165 assert(struct1 == structXml);
166
167 XmlRpcValue astruct;
168 astruct["array"] = a;
169 assert(astruct["array"][2] == struct1["d"]);
170
171 for (int i=0; i<10; i++) {
173 Event["Name"] = "string";
174
175 Event.clear();
176
177 const int NELMTS = 100;
178 int ii;
179
180 for (ii=0; ii< NELMTS; ++ii) {
181 char buf[40];
182 sprintf(buf,"%d", ii);
183 Event[buf] = buf;
184 }
185
186 Event.clear();
187
188 for (ii=0; ii< NELMTS; ++ii) {
189 char buf[40];
190 sprintf(buf,"%d", ii);
191 if (ii != NELMTS/2)
192 Event[buf] = ii;
193 else
194 for (int jj=0; jj< NELMTS; ++jj) {
195 char bufj[40];
196 sprintf(bufj,"%d", jj);
197 Event[buf][bufj] = bufj;
198 }
199 }
200
201 for (ii=0; ii< NELMTS; ++ii) {
202 char buf[40];
203 sprintf(buf,"%d", ii);
204 if (ii != NELMTS/2)
205 assert(Event[buf] == XmlRpcValue(ii));
206 else
207 assert(Event[buf].size() == NELMTS);
208 }
209 }
210}
211
212
213
214int main(int argc, char* argv[])
215{
216 _CrtDumpMemoryLeaks();
217 _CrtCheckMemory( );
218
219 testBoolean();
220 _CrtDumpMemoryLeaks();
221 _CrtCheckMemory( );
222
223 testInt();
224 _CrtDumpMemoryLeaks();
225 _CrtCheckMemory( );
226
227
228 testDouble();
229 _CrtDumpMemoryLeaks();
230 _CrtCheckMemory( );
231
232
233 testString();
234 _CrtDumpMemoryLeaks();
235 _CrtCheckMemory( );
236
237
238 testDateTime();
239 _CrtDumpMemoryLeaks();
240 _CrtCheckMemory( );
241
242
243 testArray(43.7);
244 _CrtDumpMemoryLeaks();
245 _CrtCheckMemory( );
246
247
248 testStruct();
249 _CrtDumpMemoryLeaks();
250 _CrtCheckMemory( );
251
252 return 0;
253}
XmlRpcServer s
Definition: HelloServer.cpp:11
void testStruct()
void testDateTime()
void testString()
void testBoolean()
void testArray(XmlRpcValue const &d)
void testDouble()
void testInt()
RPC method arguments and results are represented by Values.
Definition: XmlRpcValue.h:22
std::string toXml() const
Encode the Value in xml.
void setSize(int size)
Specify the size for array values. Array values will grow beyond this size if needed.
Definition: XmlRpcValue.h:111
sprintf(cut,"kal_costheta0_em>-0.93&&kal_costheta0_em<0.93&&kal_pxy0_em>=0.05+%d*0.1&&kal_pxy0_em<0.15+%d*0.1&&NGch>=2", j, j)
Definition: XmlRpc.h:35
int t()
Definition: t.c:1
int main()
Definition: test_IFile.cxx:11