PEBL 2.2
Psychology Experiment Building Language - Cross-platform psychological experiment development system
VariantTest.cpp
Go to the documentation of this file.
1//* -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- */
3// Name: VariantTest.cpp
4// Purpose: Tests the Variant Class
5// Author: Shane T. Mueller, Ph.D.
6// Copyright: (c) 2003--2005 Shane T. Mueller <smueller@obereed.net>
7// License: GPL 2
8//
9//
10//
11// This file is part of the PEBL project.
12//
13// PEBL is free software; you can redistribute it and/or modify
14// it under the terms of the GNU General Public License as published by
15// the Free Software Foundation; either version 2 of the License, or
16// (at your option) any later version.
17//
18// PEBL is distributed in the hope that it will be useful,
19// but WITHOUT ANY WARRANTY; without even the implied warranty of
20// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21// GNU General Public License for more details.
22//
23// You should have received a copy of the GNU General Public License
24// along with PEBL; if not, write to the Free Software
25// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27#include "../base/Variant.h"
28#include "../base/PComplexData.h"
29#include "../base/PList.h"
30#include "../base/Evaluator.h"
31#include "../base/PNode.h"
32#include "../base/VariableMap.h"
33#include "../base/FunctionMap.h"
34
35#include "../base/grammar.tab.hpp"
36
37#include "../utility/PEBLPath.h"
38#include "../devices/PEventLoop.h"
39
40#include "../libs/PEBLObjects.h"
41#include "../base/Evaluator.h"
42#include "../base/Loader.h"
43
44
45
46#include "../utility/PError.h"
47#include "../utility/PEBLPath.h"
48#include "../utility/PEBLUtility.h"
49#include "../utility/rc_ptrs.h"
50
51#include <iostream>
52#include <stdlib.h>
53
54using std::cout;
55using std::endl;
56using std::flush;
57
58
59 PNode * parse(const char* filename);
61
67
68//The following is the entry point for the command-line version
69int main(int argc, char **argv[])
70{
71
72
73 long int a = 12341;
74 long double b = 3352.9933;
75 char c[15] = "Rock-n-roll";
76
77 cout << "\n\n\n==========================================================\n";
78 cout << "Testing the Variant Class\n";
79 cout << "==========================================================\n";
80
81
82 Variant myVariant1;
83 Variant myVariant2;
84 Variant myVariant3;
85
86
87
88 myVariant1=a;
89 myVariant2=a;
90 cout << "Variants initiated" << endl;
91 //==========================================================
92 // Check Basic Assignment Functions
93 //==========================================================
94 cout << "\n\n\n==========================================================\n";
95 cout << "Checking Basic Assignment Functions\n";
96 cout << "==========================================================\n";
97
98 cout << "myVariant1: ["<< a << "] == [" << (long int)myVariant1 << "] " << myVariant1.GetDataTypeName() << endl;
99 cout << "myVariant1: ["<< a << "] == [" << myVariant1 << "] " << myVariant1.GetDataTypeName() << endl;
100 cout << "myVariant2: ["<< a << "] == [" << (long int)myVariant2 << "]" << myVariant2.GetDataTypeName() << endl;
101 cout << "myVariant2: ["<< a << "] == [" << myVariant2 << "]" << myVariant2.GetDataTypeName() << endl;
102
103 myVariant2 = b;
104 cout << "myVariant2: ["<< b << "] == [" << (long int)myVariant2 << "]" << myVariant2.GetDataTypeName() << endl;
105 cout << "myVariant2: ["<< b << "] == [" << myVariant2 << "]" << myVariant2.GetDataTypeName() << endl;
106
107
108 myVariant3 = c;
109 cout << "myVariant3: ["<< c << "] == [" << (char*)myVariant3 << "]" << myVariant3.GetDataTypeName() << endl;
110 cout << "myVariant3: ["<< c << "] == [" << myVariant3 << "]" << myVariant3.GetDataTypeName() << endl;
111
112 cout << "Implicit Variant:" << Variant("IMPLITIC") << endl;
113
114 //==========================================================
115 // Check Basic Arithmetic operations
116 //==========================================================
117 cout << "\n\n\n==========================================================\n";
118 cout << "Checking Basic Arithmetic operations.\n";
119 cout << "==========================================================\n";
120
121 cout << "V1 + V1: ["<< a + a << "] == [" << myVariant1 + myVariant1 << "]\n";
122 cout << "V1 + V2: ["<< a + b << "] == [" << myVariant1 + myVariant2 << "] " << endl;
123 cout << "V1 - V2: ["<< a - b << "] == [" << myVariant1 - myVariant2 << "] " << endl;
124 cout << "V1 * V2: ["<< a * b << "] == [" << myVariant1 * myVariant2 << "] " << endl;
125 cout << "V1 / V2: ["<< a / b << "] == [" << myVariant1 / myVariant2 << "] " << endl;
126
127 cout << "V3 + 'cat': [" << myVariant3 + Variant("cat") << "] " << endl;
128
129
130
131 //==========================================================
132 // Check Basic Arithmetic operations with Assignment
133 //==========================================================
134 cout << "\n\n\n==========================================================\n";
135 cout << "Check Basic Arithmetic operations with Assignment\n";
136 cout << "==========================================================\n";
137
138 myVariant3 = myVariant2 + myVariant1;
139 cout << "V3: " << myVariant3 << " " << myVariant3.GetDataTypeName() << endl;
140
141 myVariant3 = myVariant2 - myVariant1;
142 cout << "V3: " << myVariant3 << " " << myVariant3.GetDataTypeName() << endl;
143
144 myVariant3 = myVariant2 * myVariant1;
145 cout << "V3: " << myVariant3 << " " << myVariant3.GetDataTypeName() << endl;
146
147 myVariant3 = myVariant2 / myVariant1;
148 cout << "V3: " << myVariant3 << " " << myVariant3.GetDataTypeName() << endl;
149
150 myVariant3 = myVariant1 * Variant(2);
151 cout << "V3: " << myVariant3 << " " << myVariant3.GetDataTypeName() << endl;
152
153
154 cout << "Testing with int" << endl;
155 myVariant2 = Variant(333);
156 cout << "V2: [" << myVariant2 << "]" << endl;
157
158
159 cout << "Implicit:" << Variant("Implicit") << endl;
160
161 myVariant2 = "somebody ";
162 cout << "V2: [" << myVariant2 << "]" << endl;
163
164
165 myVariant2 = Variant("anybody ");
166 cout << "V2: [" << myVariant2 << "]" << endl;
167
168 //==========================================================
169 //Checking <, >, ==, etc.
170 //==========================================================
171
172 cout << "\n\n\n==========================================================\n";
173 cout << "Checking <, >, ==, etc.\n";
174 cout << "==========================================================\n";
175
176
177 myVariant1 = 34252.3;
178 myVariant2 = 342;
179
180
181 cout << "(myVariant1 < myVariant2): "<< myVariant1 << " < " << myVariant2 << " " << (myVariant1 < myVariant2) << endl;
182 cout << "(myVariant1 > myVariant2): "<< myVariant1 << " > " << myVariant2 << " " << (myVariant1 > myVariant2) << endl;
183 cout << "(myVariant1 <= myVariant2): "<< myVariant1 << " <= " << myVariant2 << " " << (myVariant1 <= myVariant2) << endl;
184 cout << "(myVariant1 >= myVariant2): "<< myVariant1 << " >= " << myVariant2 << " " << (myVariant1 >= myVariant2) << endl;
185 cout << "(myVariant1 == myVariant2): "<< myVariant1 << " == " << myVariant2 << " " << (myVariant1 == myVariant2) << endl;
186 cout << "(myVariant1 == myVariant1): "<< myVariant1 << " == " << myVariant1 << " " << (myVariant1 == myVariant1) << endl;
187 cout << "(myVariant2 == myVariant2): "<< myVariant2 << " == " << myVariant2 << " " << (myVariant2 == myVariant2) << endl;
188 cout << "(myVariant2 == myVariant1): "<< myVariant2 << " == " << myVariant1 << " " << (myVariant2 == myVariant1) << endl;
189 cout << "(myVariant1 != myVariant2): "<< myVariant1 << " != " << myVariant2 << " " << (myVariant1 != myVariant2) << endl;
190 cout << "(myVariant1 != myVariant1): "<< myVariant1 << " != " << myVariant1 << " " << (myVariant1 != myVariant1) << endl;
191 cout << "(myVariant2 != myVariant2): "<< myVariant2 << " != " << myVariant2 << " " << (myVariant2 != myVariant2) << endl;
192 cout << "(myVariant2 != myVariant1): "<< myVariant2 << " != " << myVariant1 << " " << (myVariant2 != myVariant1) << endl;
193 cout << "(myVariant2 < myVariant1): "<< myVariant2 << " < " << myVariant1 << " " << (myVariant2 < myVariant1) << endl;
194 cout << "(myVariant2 > myVariant1): "<< myVariant2 << " > " << myVariant1 << " " << (myVariant2 > myVariant1) << endl;
195 cout << "(myVariant2 <= myVariant1): "<< myVariant2 << " <= " << myVariant1 << " " << (myVariant2 <= myVariant1) << endl;
196 cout << "(myVariant2 >= myVariant1): "<< myVariant2 << " >= " << myVariant1 << " " << (myVariant2 >= myVariant1) << endl;
197
198 myVariant1 = "Something";
199 myVariant2 = "Anything";
200
201 cout << "(myVariant1 < myVariant2): "<< myVariant1 << " < " << myVariant2 << " " << (myVariant1 < myVariant2) << endl;
202 cout << "(myVariant1 > myVariant2): "<< myVariant1 << " > " << myVariant2 << " " << (myVariant1 > myVariant2) << endl;
203 cout << "(myVariant1 <= myVariant2): "<< myVariant1 << " <= " << myVariant2 << " " << (myVariant1 <= myVariant2) << endl;
204 cout << "(myVariant1 >= myVariant2): "<< myVariant1 << " >= " << myVariant2 << " " << (myVariant1 >= myVariant2) << endl;
205 cout << "(myVariant1 == myVariant2): "<< myVariant1 << " == " << myVariant2 << " " << (myVariant1 == myVariant2) << endl;
206 cout << "(myVariant1 == myVariant1): "<< myVariant1 << " == " << myVariant1 << " " << (myVariant1 == myVariant1) << endl;
207 cout << "(myVariant2 == myVariant2): "<< myVariant2 << " == " << myVariant2 << " " << (myVariant2 == myVariant2) << endl;
208 cout << "(myVariant2 == myVariant1): "<< myVariant2 << " == " << myVariant1 << " " << (myVariant2 == myVariant1) << endl;
209 cout << "(myVariant1 != myVariant2): "<< myVariant1 << " != " << myVariant2 << " " << (myVariant1 != myVariant2) << endl;
210 cout << "(myVariant1 != myVariant1): "<< myVariant1 << " != " << myVariant1 << " " << (myVariant1 != myVariant1) << endl;
211 cout << "(myVariant2 != myVariant2): "<< myVariant2 << " != " << myVariant2 << " " << (myVariant2 != myVariant2) << endl;
212 cout << "(myVariant2 != myVariant1): "<< myVariant2 << " != " << myVariant1 << " " << (myVariant2 != myVariant1) << endl;
213 cout << "(myVariant2 < myVariant1): "<< myVariant2 << " < " << myVariant1 << " " << (myVariant2 < myVariant1) << endl;
214 cout << "(myVariant2 > myVariant1): "<< myVariant2 << " > " << myVariant1 << " " << (myVariant2 > myVariant1) << endl;
215 cout << "(myVariant2 <= myVariant1): "<< myVariant2 << " <= " << myVariant1 << " " << (myVariant2 <= myVariant1) << endl;
216 cout << "(myVariant2 >= myVariant1): "<< myVariant2 << " >= " << myVariant1 << " " << (myVariant2 >= myVariant1) << endl;
217
218 //==========================================================
219 //Checking Variable Type
220 //==========================================================
221
222 cout << "\n\n\n==========================================================\n";
223 cout << "Checking Variable Type\n";
224 cout << "==========================================================\n";
225
226 char* name = "Apostrophe";
227 myVariant2 = Variant(name,P_DATA_LOCALVARIABLE);
228 cout << "Apostrophe: "<< name << " " << myVariant2 << myVariant2.GetDataTypeName() << endl;
229
230 myVariant3 = Variant("Nonesty",P_DATA_LOCALVARIABLE);
231 cout << "Nonesty: "<< flush << myVariant3 << flush << myVariant3.GetDataTypeName() << endl;
232
233
234
235
236
237
238 //==========================================================
239 //Checking List Type
240 //==========================================================
241
242 cout << "\n\n\n==========================================================\n";
243 cout << "Checking List Type\n";
244 cout << "==========================================================\n";
245
246 //First, make a list
247
248 counted_ptr<PList> list1;
249 myVariant1 = 33;
250
251 list1=counted_ptr<PList>(new PList());
252 list1->PushFront(myVariant1);
253 list1->PushFront(myVariant2);
254 list1->PushFront(myVariant3);
255
256 PComplexData * pcd = new PComplexData(list1);
257 Variant myVariant4 = Variant(pcd);
258
259 cout << "MyVariant4 has type: " << myVariant4.GetDataTypeName() << endl;;
260
261
262 cout << "Printing the list: [" << endl;
263 cout << myVariant4 << endl;
264 cout << "] List printed." << endl;
265
266
267 //Testing copying
268 cout << "Testing copying...." << endl;
269 Variant myVariant5 = myVariant4;
270
271 cout << "Type of myVariant5: " << myVariant5.GetDataTypeName() << endl;
272
273
274 cout << "List copied. Printing copy:" << endl;
275 cout << myVariant5 << endl;
276
277
278
279 cout << "Finished" << endl;
280 return 0;
281}
282
#define NULL
Definition BinReloc.cpp:317
PNode * parse()
int main(int argc, char **argv[])
@ P_DATA_LOCALVARIABLE
Definition Variant.h:48
static const PNode * gEvalNode
static PEBLPath gPath
static PEventLoop * mEventLoop
static VariableMap gGlobalVariableMap
static FunctionMap mFunctionMap
Initiate some static member data.
Definition PList.h:45
Definition PNode.h:45
std::string GetDataTypeName() const
This returns the type as a string.
Definition Variant.cpp:891