Skip to content

Commit d4f9fb0

Browse files
author
Matthias Güdemann
committed
Add unit test for interpreter evaluation
1 parent 55a1dfe commit d4f9fb0

File tree

4 files changed

+78
-0
lines changed

4 files changed

+78
-0
lines changed

src/goto-programs/interpreter_class.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,8 @@ class interpretert:public messaget
306306

307307
void initialize(bool init);
308308
void show_state();
309+
310+
friend class interpreter_testt;
309311
};
310312

311313
#endif // CPROVER_GOTO_PROGRAMS_INTERPRETER_CLASS_H

unit/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ SRC += unit_tests.cpp \
4545
util/symbol_table.cpp \
4646
util/unicode.cpp \
4747
catch_example.cpp \
48+
interpreter/interpreter.cpp \
4849
# Empty last line
4950

5051
INCLUDES= -I ../src/ -I.

unit/interpreter/interpreter.cpp

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*******************************************************************\
2+
3+
Module: Interpreter unit tests.
4+
5+
Author: Diffblue Ltd.
6+
7+
\*******************************************************************/
8+
9+
#include <testing-utils/catch.hpp>
10+
11+
#include <goto-programs/goto_functions.h>
12+
#include <goto-programs/interpreter_class.h>
13+
#include <util/message.h>
14+
#include <util/mp_arith.h>
15+
#include <util/namespace.h>
16+
17+
typedef interpretert::mp_vectort mp_vectort;
18+
19+
class interpreter_testt
20+
{
21+
symbol_tablet symbol_table;
22+
goto_functionst goto_functions;
23+
null_message_handlert null_message_handler;
24+
interpretert interpreter;
25+
26+
public:
27+
explicit interpreter_testt()
28+
: interpreter(symbol_table, goto_functions, null_message_handler)
29+
{
30+
}
31+
32+
mp_vectort evaluate(const exprt &expression)
33+
{
34+
mp_vectort result;
35+
interpreter.evaluate(expression, result);
36+
return result;
37+
}
38+
};
39+
40+
SCENARIO("interpreter evaluation null pointer expressions")
41+
{
42+
interpreter_testt interpreter_test;
43+
mp_vectort null_vector = {0};
44+
45+
THEN("null pointer without operands")
46+
{
47+
unsignedbv_typet java_char(16);
48+
pointer_typet pointer_type(java_char, 64);
49+
50+
constant_exprt constant_expr(ID_NULL, pointer_type);
51+
52+
mp_vectort mp_vector = interpreter_test.evaluate(constant_expr);
53+
54+
REQUIRE_THAT(mp_vector, Catch::Equals(null_vector));
55+
}
56+
THEN("null pointer with operands")
57+
{
58+
pointer_typet outer_pointer_type(empty_typet(), 64);
59+
constant_exprt outer_expression(
60+
"0000000000000000000000000000000000000000000000000000000000000000",
61+
outer_pointer_type);
62+
63+
pointer_typet inner_pointer_type(empty_typet(), 64);
64+
constant_exprt inner_expression(ID_NULL, inner_pointer_type);
65+
66+
outer_expression.move_to_operands(inner_expression);
67+
68+
mp_vectort mp_vector = interpreter_test.evaluate(outer_expression);
69+
70+
REQUIRE_THAT(mp_vector, Catch::Equals(null_vector));
71+
}
72+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
goto-programs
2+
testing-utils
3+
util

0 commit comments

Comments
 (0)