2010-06-25 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
[WebKit-https.git] / JavaScriptCore / qt / benchmarks / qscriptvalue / tst_qscriptvalue.cpp
1 /*
2     Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
3
4     This library is free software; you can redistribute it and/or
5     modify it under the terms of the GNU Library General Public
6     License as published by the Free Software Foundation; either
7     version 2 of the License, or (at your option) any later version.
8
9     This library is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12     Library General Public License for more details.
13
14     You should have received a copy of the GNU Library General Public License
15     along with this library; see the file COPYING.LIB.  If not, write to
16     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17     Boston, MA 02110-1301, USA.
18 */
19
20 #include "qscriptengine.h"
21 #include "qscriptstring.h"
22 #include "qscriptvalue.h"
23 #include <qtest.h>
24
25 Q_DECLARE_METATYPE(QScriptValue);
26
27 class tst_QScriptValue : public QObject {
28     Q_OBJECT
29
30 public:
31     tst_QScriptValue()
32         : m_engine(0)
33     {}
34
35     ~tst_QScriptValue()
36     {
37         if (m_engine)
38             delete m_engine;
39     }
40
41 private slots:
42     void values_data();
43
44     void ctorBool();
45     void ctorReal();
46     void ctorNumber();
47     void ctorQString();
48     void ctorCString();
49     void ctorSpecial();
50     void ctorQScriptValue();
51
52     void isValid_data();
53     void isValid();
54     void isBool_data();
55     void isBool();
56     void isNumber_data();
57     void isNumber();
58     void isFunction_data();
59     void isFunction();
60     void isNull_data();
61     void isNull();
62     void isString_data();
63     void isString();
64     void isUndefined_data();
65     void isUndefined();
66     void isObject_data();
67     void isObject();
68     void isError_data();
69     void isError();
70
71     void toString_data();
72     void toString();
73     void toNumber_data();
74     void toNumber();
75     void toBool_data();
76     void toBool();
77     void toInteger_data();
78     void toInteger();
79     void toInt32_data();
80     void toInt32();
81     void toUInt32_data();
82     void toUInt32();
83     void toUInt16_data();
84     void toUInt16();
85     void toObject_data();
86     void toObject();
87
88     void equals_data();
89     void equals();
90     void strictlyEquals_data();
91     void strictlyEquals();
92     void instanceOf_data();
93     void instanceOf();
94
95 private:
96     QScriptEngine* m_engine;
97 };
98
99 void tst_QScriptValue::values_data()
100 {
101     if (m_engine)
102         delete m_engine;
103     m_engine = new QScriptEngine;
104
105     QTest::addColumn<QScriptValue>("value");
106
107     QTest::newRow("invalid") << QScriptValue();
108
109     QTest::newRow("cbool") << QScriptValue(true);
110     QTest::newRow("cnumber") << QScriptValue(1234);
111     QTest::newRow("cstring") << QScriptValue("abc");
112     QTest::newRow("cnull") << QScriptValue(QScriptValue::NullValue);
113     QTest::newRow("cundefined") << QScriptValue(QScriptValue::UndefinedValue);
114
115     QTest::newRow("jsbool") << m_engine->evaluate("true");
116     QTest::newRow("jsnumber") << m_engine->evaluate("12345");
117     QTest::newRow("jsstring") << m_engine->evaluate("'go'");
118     QTest::newRow("jsfunction") << m_engine->evaluate("(function {})");
119     QTest::newRow("jsnull") << m_engine->nullValue();
120     QTest::newRow("jsundefined") << m_engine->undefinedValue();
121     QTest::newRow("jsobject") << m_engine->newObject();
122     QTest::newRow("jserror") << m_engine->evaluate("new Error()");
123 }
124
125 void tst_QScriptValue::ctorBool()
126 {
127     QBENCHMARK {
128         QScriptValue(true);
129     }
130 }
131
132 void tst_QScriptValue::ctorReal()
133 {
134     QBENCHMARK {
135         QScriptValue(12.3);
136     }
137 }
138
139 void tst_QScriptValue::ctorNumber()
140 {
141     QBENCHMARK {
142         QScriptValue(123);
143     }
144 }
145
146 void tst_QScriptValue::ctorQString()
147 {
148     QString str = QString::fromLatin1("ciao");
149     QBENCHMARK {
150         QScriptValue(str);
151     }
152 }
153
154 void tst_QScriptValue::ctorCString()
155 {
156     QBENCHMARK {
157         QScriptValue("Pong!");
158     }
159 }
160
161 void tst_QScriptValue::ctorSpecial()
162 {
163     QBENCHMARK {
164         (void)QScriptValue(QScriptValue::NullValue);
165     }
166 }
167
168 void tst_QScriptValue::ctorQScriptValue()
169 {
170     QScriptValue tmp(1234);
171     QBENCHMARK {
172         QScriptValue(tmp);
173     }
174 }
175
176 void tst_QScriptValue::isValid_data()
177 {
178     values_data();
179 }
180
181 void tst_QScriptValue::isValid()
182 {
183     QFETCH(QScriptValue, value);
184     QBENCHMARK {
185         value.isValid();
186     }
187 }
188
189 void tst_QScriptValue::isBool_data()
190 {
191     values_data();
192 }
193
194 void tst_QScriptValue::isBool()
195 {
196     QFETCH(QScriptValue, value);
197     QBENCHMARK {
198         value.isBool();
199     }
200 }
201
202 void tst_QScriptValue::isNumber_data()
203 {
204     values_data();
205 }
206
207 void tst_QScriptValue::isNumber()
208 {
209     QFETCH(QScriptValue, value);
210     QBENCHMARK {
211         value.isNumber();
212     }
213 }
214
215 void tst_QScriptValue::isFunction_data()
216 {
217     values_data();
218 }
219
220 void tst_QScriptValue::isFunction()
221 {
222     QFETCH(QScriptValue, value);
223     QBENCHMARK {
224         value.isFunction();
225     }
226 }
227
228 void tst_QScriptValue::isNull_data()
229 {
230     values_data();
231 }
232
233 void tst_QScriptValue::isNull()
234 {
235     QFETCH(QScriptValue, value);
236     QBENCHMARK {
237         value.isNull();
238     }
239 }
240
241 void tst_QScriptValue::isString_data()
242 {
243     values_data();
244 }
245
246 void tst_QScriptValue::isString()
247 {
248     QFETCH(QScriptValue, value);
249     QBENCHMARK {
250         value.isString();
251     }
252 }
253
254 void tst_QScriptValue::isUndefined_data()
255 {
256     values_data();
257 }
258
259 void tst_QScriptValue::isUndefined()
260 {
261     QFETCH(QScriptValue, value);
262     QBENCHMARK {
263         value.isUndefined();
264     }
265 }
266
267 void tst_QScriptValue::isObject_data()
268 {
269     values_data();
270 }
271
272 void tst_QScriptValue::isObject()
273 {
274     QFETCH(QScriptValue, value);
275     QBENCHMARK {
276         value.isObject();
277     }
278 }
279
280 void tst_QScriptValue::isError_data()
281 {
282     values_data();
283 }
284
285 void tst_QScriptValue::isError()
286 {
287     QFETCH(QScriptValue, value);
288     QBENCHMARK {
289         value.isError();
290     }
291 }
292
293 void tst_QScriptValue::toString_data()
294 {
295     values_data();
296 }
297
298 void tst_QScriptValue::toString()
299 {
300     QFETCH(QScriptValue, value);
301     QBENCHMARK {
302         value.toString();
303     }
304 }
305
306 void tst_QScriptValue::toNumber_data()
307 {
308     values_data();
309 }
310
311 void tst_QScriptValue::toNumber()
312 {
313     QFETCH(QScriptValue, value);
314     QBENCHMARK {
315         value.toNumber();
316     }
317 }
318
319 void tst_QScriptValue::toBool_data()
320 {
321     values_data();
322 }
323
324 void tst_QScriptValue::toBool()
325 {
326     QFETCH(QScriptValue, value);
327     QBENCHMARK {
328         value.toBool();
329     }
330 }
331
332 void tst_QScriptValue::toInteger_data()
333 {
334     values_data();
335 }
336
337 void tst_QScriptValue::toInteger()
338 {
339     QFETCH(QScriptValue, value);
340     QBENCHMARK {
341         value.toInteger();
342     }
343 }
344
345 void tst_QScriptValue::toInt32_data()
346 {
347     values_data();
348 }
349
350 void tst_QScriptValue::toInt32()
351 {
352     QFETCH(QScriptValue, value);
353     QBENCHMARK {
354         value.toInt32();
355     }
356 }
357
358 void tst_QScriptValue::toUInt32_data()
359 {
360     values_data();
361 }
362
363 void tst_QScriptValue::toUInt32()
364 {
365     QFETCH(QScriptValue, value);
366     QBENCHMARK {
367         value.toUInt32();
368     }
369 }
370
371 void tst_QScriptValue::toUInt16_data()
372 {
373     values_data();
374 }
375
376 void tst_QScriptValue::toUInt16()
377 {
378     QFETCH(QScriptValue, value);
379     QBENCHMARK {
380         value.toUInt16();
381     }
382 }
383
384 void tst_QScriptValue::toObject_data()
385 {
386     values_data();
387 }
388
389 void tst_QScriptValue::toObject()
390 {
391     QFETCH(QScriptValue, value);
392     QBENCHMARK {
393         value.toObject();
394     }
395 }
396
397 void tst_QScriptValue::equals_data()
398 {
399     values_data();
400 }
401
402 void tst_QScriptValue::equals()
403 {
404     QFETCH(QScriptValue, value);
405     static QScriptValue previous;
406     QBENCHMARK {
407         value.equals(previous);
408     }
409     previous = value;
410 }
411
412 void tst_QScriptValue::strictlyEquals_data()
413 {
414     values_data();
415 }
416
417 void tst_QScriptValue::strictlyEquals()
418 {
419     QFETCH(QScriptValue, value);
420     static QScriptValue previous;
421     QBENCHMARK {
422         value.strictlyEquals(previous);
423     }
424     previous = value;
425 }
426
427 void tst_QScriptValue::instanceOf_data()
428 {
429     values_data();
430 }
431
432 void tst_QScriptValue::instanceOf()
433 {
434     QFETCH(QScriptValue, value);
435     static QScriptValue object = m_engine->newObject();
436     QBENCHMARK {
437         value.instanceOf(object);
438     }
439 }
440
441 QTEST_MAIN(tst_QScriptValue)
442 #include "tst_qscriptvalue.moc"