Skip to content

Commit 3989689

Browse files
committed
Add unit tests of lazy cprover_initialize generation
This tests that an empty bodied initialize function is generated by `typecheck` and that the body is then populated by `convert_lazy_method`
1 parent e53acb9 commit 3989689

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

jbmc/unit/java_bytecode/java_bytecode_language/language.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ Author: Diffblue Limited.
1212

1313
#include <java-testing-utils/load_java_class.h>
1414
#include <java-testing-utils/require_type.h>
15+
#include <java_bytecode/java_bytecode_language.h>
16+
#include <linking/static_lifetime_init.h>
17+
#include <util/options.h>
1518

1619
SCENARIO(
1720
"java_bytecode_language_opaque_field",
@@ -45,3 +48,48 @@ SCENARIO(
4548
}
4649
}
4750
}
51+
52+
static void use_external_driver(java_bytecode_languaget &language)
53+
{
54+
optionst options;
55+
options.set_option("symex-driven-lazy-loading", true);
56+
language.set_language_options(options);
57+
}
58+
59+
TEST_CASE(
60+
"LAZY_METHODS_MODE_EXTERNAL_DRIVER based generation of cprover_initialise",
61+
"[core][java_bytecode_language]")
62+
{
63+
java_bytecode_languaget language;
64+
null_message_handlert null_message_handler;
65+
language.set_message_handler(null_message_handler);
66+
use_external_driver(language);
67+
symbol_tablet symbol_table;
68+
language.typecheck(symbol_table, "");
69+
{
70+
const symbolt *const initialise = symbol_table.lookup(INITIALIZE_FUNCTION);
71+
REQUIRE(initialise);
72+
REQUIRE(initialise->value.is_nil());
73+
}
74+
language.convert_lazy_method(INITIALIZE_FUNCTION, symbol_table);
75+
{
76+
const symbolt *const initialise = symbol_table.lookup(INITIALIZE_FUNCTION);
77+
REQUIRE(initialise);
78+
REQUIRE(can_cast_expr<codet>(initialise->value));
79+
}
80+
}
81+
82+
TEST_CASE(
83+
"Standard generation of cprover_initialise",
84+
"[core][java_bytecode_language]")
85+
{
86+
java_bytecode_languaget language;
87+
null_message_handlert null_message_handler;
88+
language.set_message_handler(null_message_handler);
89+
language.set_language_options(optionst{});
90+
symbol_tablet symbol_table;
91+
language.typecheck(symbol_table, "");
92+
const symbolt *const initialise = symbol_table.lookup(INITIALIZE_FUNCTION);
93+
REQUIRE(initialise);
94+
REQUIRE(can_cast_expr<codet>(initialise->value));
95+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
java_bytecode
12
java-testing-utils
3+
linking
24
testing-utils
35
util

0 commit comments

Comments
 (0)