Mercurial > malikania
annotate tests/libcommon/js-elapsed-timer/main.cpp @ 189:f28cb6d04731
Misc: extreme refactoring
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 25 Oct 2018 21:36:14 +0200 |
parents | 0cecdadfb5c4 |
children |
rev | line source |
---|---|
182 | 1 /* |
2 * main.cpp -- test ElapsedTimer (JavaScript binding) | |
3 * | |
4 * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> | |
5 * | |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
19 #include <thread> | |
20 | |
21 #define BOOST_TEST_MODULE "Javascript ElapsedTimer" | |
22 #include <boost/format.hpp> | |
23 #include <boost/test/unit_test.hpp> | |
24 | |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
25 #include <malikania/js/test/js_api_fixture.hpp> |
182 | 26 |
27 using boost::format; | |
28 using boost::str; | |
29 | |
30 using namespace std::chrono_literals; | |
31 | |
32 namespace mlk { | |
33 | |
34 namespace { | |
35 | |
36 /* | |
37 * For all tests, we tolerate 30 ms because some systems have bigger lags. | |
38 */ | |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
39 constexpr int margin = 30; |
182 | 40 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
41 void assert_range(int value, int expected) |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
42 { |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
43 if (value < (expected - margin) || value > (expected + margin)) |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
44 throw std::invalid_argument( |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
45 str(format("%d is bigger than [%d, %d]") % value % (expected - margin) % (expected + margin))); |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
46 } |
182 | 47 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
48 BOOST_FIXTURE_TEST_SUITE(test_elapsed_timer_suite, js::test::js_api_fixture) |
182 | 49 |
50 BOOST_AUTO_TEST_CASE(standard) | |
51 { | |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
52 if (duk_peval_string(ctx_, "timer = new Malikania.ElapsedTimer();") != 0) |
189
f28cb6d04731
Misc: extreme refactoring
David Demelier <markand@malikania.fr>
parents:
188
diff
changeset
|
53 throw mlk::js::duk::get_stack(ctx_, -1); |
182 | 54 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
55 std::this_thread::sleep_for(300ms); |
182 | 56 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
57 if (duk_peval_string(ctx_, "result = timer.elapsed();") != 0) |
189
f28cb6d04731
Misc: extreme refactoring
David Demelier <markand@malikania.fr>
parents:
188
diff
changeset
|
58 throw mlk::js::duk::get_stack(ctx_, -1); |
182 | 59 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
60 duk_get_global_string(ctx_, "result"); |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
61 assert_range(duk_to_int(ctx_, -1), 300); |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
62 duk_pop(ctx_); |
182 | 63 } |
64 | |
65 BOOST_AUTO_TEST_CASE(pause) | |
66 { | |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
67 if (duk_peval_string(ctx_, "timer = new Malikania.ElapsedTimer();") != 0) |
189
f28cb6d04731
Misc: extreme refactoring
David Demelier <markand@malikania.fr>
parents:
188
diff
changeset
|
68 throw mlk::js::duk::get_stack(ctx_, -1); |
182 | 69 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
70 /* |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
71 * Simulate a pause in the game like this: |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
72 * |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
73 * start pause restart elapsed |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
74 * | 10ms |.5ms.| 6ms | |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
75 * |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
76 * Since the game was paused, the 5ms must not be totalized. |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
77 */ |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
78 std::this_thread::sleep_for(10ms); |
182 | 79 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
80 if (duk_peval_string(ctx_, "timer.pause();") != 0) |
189
f28cb6d04731
Misc: extreme refactoring
David Demelier <markand@malikania.fr>
parents:
188
diff
changeset
|
81 throw mlk::js::duk::get_stack(ctx_, -1); |
182 | 82 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
83 std::this_thread::sleep_for(5ms); |
182 | 84 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
85 if (duk_peval_string(ctx_, "timer.restart();") != 0) |
189
f28cb6d04731
Misc: extreme refactoring
David Demelier <markand@malikania.fr>
parents:
188
diff
changeset
|
86 throw mlk::js::duk::get_stack(ctx_, -1); |
182 | 87 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
88 std::this_thread::sleep_for(6ms); |
182 | 89 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
90 if (duk_peval_string(ctx_, "result = timer.elapsed()") != 0) |
189
f28cb6d04731
Misc: extreme refactoring
David Demelier <markand@malikania.fr>
parents:
188
diff
changeset
|
91 throw mlk::js::duk::get_stack(ctx_, -1); |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
92 |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
93 duk_get_global_string(ctx_, "result"); |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
94 assert_range(duk_to_int(ctx_, -1), 16); |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
95 duk_pop(ctx_); |
182 | 96 } |
97 | |
98 BOOST_AUTO_TEST_CASE(doublecheck) | |
99 { | |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
100 if (duk_peval_string(ctx_, "timer = new Malikania.ElapsedTimer();") != 0) |
189
f28cb6d04731
Misc: extreme refactoring
David Demelier <markand@malikania.fr>
parents:
188
diff
changeset
|
101 throw mlk::js::duk::get_stack(ctx_, -1); |
182 | 102 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
103 std::this_thread::sleep_for(50ms); |
182 | 104 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
105 if (duk_peval_string(ctx_, "result = timer.elapsed()") != 0) |
189
f28cb6d04731
Misc: extreme refactoring
David Demelier <markand@malikania.fr>
parents:
188
diff
changeset
|
106 throw mlk::js::duk::get_stack(ctx_, -1); |
182 | 107 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
108 std::this_thread::sleep_for(50ms); |
182 | 109 |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
110 if (duk_peval_string(ctx_, "result = timer.elapsed()") != 0) |
189
f28cb6d04731
Misc: extreme refactoring
David Demelier <markand@malikania.fr>
parents:
188
diff
changeset
|
111 throw mlk::js::duk::get_stack(ctx_, -1); |
188
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
112 |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
113 duk_get_global_string(ctx_, "result"); |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
114 assert_range(duk_to_int(ctx_, -1), 100); |
0cecdadfb5c4
Misc: rework javascript bindings, closes #916
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
115 duk_pop(ctx_); |
182 | 116 } |
117 | |
118 BOOST_AUTO_TEST_SUITE_END() | |
119 | |
120 } // !namespace | |
121 | |
122 } // !mlk |