Skip to content

Commit 8065a69

Browse files
committed
Ensure result of to_predicates is deterministic
The order of entries in an unordered map would previously yield varying results. This caused spurious unit test failures as unit tests perform exact string matching on the output.
1 parent f0a4e75 commit 8065a69

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

src/analyses/variable-sensitivity/abstract_environment.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99
#include <analyses/variable-sensitivity/abstract_environment.h>
1010
#include <analyses/variable-sensitivity/abstract_object_statistics.h>
1111
#include <analyses/variable-sensitivity/variable_sensitivity_object_factory.h>
12+
1213
#include <util/expr_util.h>
1314
#include <util/simplify_expr.h>
1415
#include <util/simplify_expr_class.h>
16+
#include <util/simplify_utils.h>
1517

1618
#include <algorithm>
1719
#include <map>
@@ -427,7 +429,7 @@ exprt abstract_environmentt::to_predicate() const
427429
if(is_top())
428430
return true_exprt();
429431

430-
auto predicates = std::vector<exprt>{};
432+
exprt::operandst predicates;
431433
for(const auto &entry : map.get_view())
432434
{
433435
auto sym = entry.first;
@@ -439,6 +441,8 @@ exprt abstract_environmentt::to_predicate() const
439441

440442
if(predicates.size() == 1)
441443
return predicates.front();
444+
445+
sort_operands(predicates);
442446
return and_exprt(predicates);
443447
}
444448

unit/analyses/variable-sensitivity/abstract_environment/to_predicate.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ SCENARIO(
6767
env.assign(x_name, val2, ns);
6868
env.assign(y_name, val3, ns);
6969

70-
THEN_PREDICATE(env, "y == 3 && x == 2");
70+
THEN_PREDICATE(env, "x == 2 && y == 3");
7171
}
7272
}
7373
}

0 commit comments

Comments
 (0)