Skip to content

Commit 00f39e5

Browse files
committed
test: cover repeated benchmark execution
1 parent 430020d commit 00f39e5

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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+
}

0 commit comments

Comments
 (0)