File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ #include < gtest/gtest.h>
2+
3+ extern " C" {
4+ #include " PikaMain.h"
5+ #include " PikaParser.h"
6+ #include " PikaVM.h"
7+ #include " dataArgs.h"
8+ #include " dataMemory.h"
9+ }
10+
11+ TEST (benchmark_lifecycle, root_survives_repeated_execution_and_one_teardown) {
12+ ASSERT_EQ (0u , pikaMemNow ());
13+ Args* buffers = New_strBuff ();
14+ char * assembly = pika_lines2Asm (
15+ buffers, (char *)
16+ " def fib(n):\n "
17+ " if n < 2:\n "
18+ " return n\n "
19+ " return fib(n - 1) + fib(n - 2)\n "
20+ " result = fib(15)\n " );
21+ ByteCodeFrame bytecode_frame;
22+ byteCodeFrame_init (&bytecode_frame);
23+ byteCodeFrame_appendFromAsm (&bytecode_frame, assembly);
24+ PikaObj* root = newRootObj ((char *)" pikaMain" , New_PikaMain);
25+
26+ for (int iteration = 0 ; iteration < 500 ; ++iteration) {
27+ ASSERT_NE (nullptr , pikaVM_runByteCodeFrame (root, &bytecode_frame));
28+ ASSERT_EQ (610 , obj_getInt (root, (char *)" result" )) << iteration;
29+ }
30+
31+ ASSERT_NE (nullptr , pikaVM_run (root, (char *)" missing_name()\n " ));
32+ ASSERT_NE (nullptr , pikaVM_runByteCodeFrame (root, &bytecode_frame));
33+ EXPECT_EQ (610 , obj_getInt (root, (char *)" result" ));
34+
35+ obj_deinit (root);
36+ byteCodeFrame_deinit (&bytecode_frame);
37+ args_deinit (buffers);
38+ EXPECT_EQ (0u , pikaMemNow ());
39+ }
You can’t perform that action at this time.
0 commit comments