1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282
|
/*******************************************************************\
Module: Unit tests helpers for value_set_abstract_objects
Author: Jez Higgins, jez@jezuk.co.uk
\*******************************************************************/
#ifndef CPROVER_ANALYSES_VARIABLE_SENSITIVITY_VARIABLE_SENSITIVITY_TEST_HELPERS_H
#define CPROVER_ANALYSES_VARIABLE_SENSITIVITY_VARIABLE_SENSITIVITY_TEST_HELPERS_H
#include <memory>
#include <analyses/variable-sensitivity/abstract_object.h>
class abstract_object_sett;
class constant_abstract_valuet;
class constant_interval_exprt;
class interval_abstract_valuet;
class value_set_abstract_objectt;
class variable_sensitivity_domaint;
std::shared_ptr<const constant_abstract_valuet>
make_constant(exprt val, abstract_environmentt &env, namespacet &ns);
std::shared_ptr<const constant_abstract_valuet> make_top_constant();
std::shared_ptr<const constant_abstract_valuet> make_bottom_constant();
std::shared_ptr<const interval_abstract_valuet> make_interval(
const exprt &vall,
const exprt &valh,
abstract_environmentt &env,
namespacet &ns);
std::shared_ptr<const interval_abstract_valuet> make_interval(
const binary_relation_exprt &val,
abstract_environmentt &env,
namespacet &ns);
std::shared_ptr<const interval_abstract_valuet> make_interval(
const constant_interval_exprt &val,
abstract_environmentt &env,
namespacet &ns);
std::shared_ptr<const interval_abstract_valuet> make_top_interval();
std::shared_ptr<const interval_abstract_valuet> make_bottom_interval();
std::shared_ptr<const value_set_abstract_objectt>
make_value_set(exprt val, abstract_environmentt &env, namespacet &ns);
std::shared_ptr<const value_set_abstract_objectt> make_value_set(
const std::vector<exprt> &vals,
abstract_environmentt &env,
namespacet &ns);
std::shared_ptr<const value_set_abstract_objectt> make_bottom_value_set();
std::shared_ptr<const value_set_abstract_objectt> make_top_value_set();
abstract_object_pointert make_bottom_object();
abstract_object_pointert make_top_object();
std::shared_ptr<const constant_abstract_valuet>
as_constant(const abstract_object_pointert &aop);
std::shared_ptr<const interval_abstract_valuet>
as_interval(const abstract_object_pointert &aop);
std::shared_ptr<const value_set_abstract_objectt>
as_value_set(const abstract_object_pointert &aop);
bool set_contains(const abstract_object_sett &set, const exprt &val);
void EXPECT(
std::shared_ptr<const constant_abstract_valuet> &result,
exprt expected_value);
void EXPECT(
std::shared_ptr<const interval_abstract_valuet> &result,
exprt lower_value,
exprt upper_value);
void EXPECT(
std::shared_ptr<const value_set_abstract_objectt> &result,
const std::vector<exprt> &expected_values);
void EXPECT(
const std::vector<exprt> &values,
const std::vector<exprt> &expected_values);
void EXPECT_INDEX(
std::shared_ptr<const abstract_objectt> &result,
int index,
int expected,
abstract_environmentt &environment,
namespacet &ns);
void EXPECT_INDEX(
std::shared_ptr<const abstract_objectt> &result,
int index,
std::vector<int> expected,
abstract_environmentt &environment,
namespacet &ns);
void EXPECT_INDEX_TOP(
std::shared_ptr<const abstract_objectt> &result,
int index,
abstract_environmentt &environment,
namespacet &ns);
void EXPECT_TOP(std::shared_ptr<const abstract_objectt> result);
void EXPECT_TOP(abstract_objectt::combine_result const &result);
void EXPECT_TOP(std::shared_ptr<const value_set_abstract_objectt> &result);
void EXPECT_BOTTOM(std::shared_ptr<const abstract_objectt> result);
void EXPECT_BOTTOM(abstract_objectt::combine_result const &result);
template <class value_typet>
struct merge_result
{
bool modified;
std::shared_ptr<const value_typet> result;
};
void EXPECT_UNMODIFIED(
std::shared_ptr<const abstract_objectt> &result,
bool modified);
template <class abstract_typet>
void EXPECT_UNMODIFIED(merge_result<const abstract_typet> &result)
{
auto ao = std::dynamic_pointer_cast<const abstract_objectt>(result.result);
EXPECT_UNMODIFIED(ao, result.modified);
}
template <class abstract_typet>
void EXPECT_UNMODIFIED_TOP(merge_result<const abstract_typet> &result)
{
auto ao = std::dynamic_pointer_cast<const abstract_objectt>(result.result);
EXPECT_UNMODIFIED(ao, result.modified);
EXPECT_TOP(result.result);
}
template <class abstract_typet>
void EXPECT_UNMODIFIED_BOTTOM(merge_result<const abstract_typet> &result)
{
auto ao = std::dynamic_pointer_cast<const abstract_objectt>(result.result);
EXPECT_UNMODIFIED(ao, result.modified);
EXPECT_BOTTOM(result.result);
}
template <class abstract_typet>
void EXPECT_MODIFIED_TOP(merge_result<const abstract_typet> &result)
{
auto ao = std::dynamic_pointer_cast<const abstract_objectt>(result.result);
EXPECT_MODIFIED(ao, result.modified);
EXPECT_TOP(result.result);
}
void EXPECT_MODIFIED(
std::shared_ptr<const abstract_objectt> &result,
bool modified);
template <class abstract_typet>
void EXPECT_MODIFIED(merge_result<const abstract_typet> &result)
{
auto ao = std::dynamic_pointer_cast<const abstract_objectt>(result.result);
EXPECT_MODIFIED(ao, result.modified);
}
void EXPECT_UNMODIFIED(
std::shared_ptr<const constant_abstract_valuet> &result,
bool modified,
exprt expected_value);
void EXPECT_UNMODIFIED(
merge_result<const constant_abstract_valuet> &result,
exprt expected_value);
void EXPECT_UNMODIFIED(
std::shared_ptr<const interval_abstract_valuet> &result,
bool modified,
exprt lower_value,
exprt upper_value);
void EXPECT_UNMODIFIED(
merge_result<const interval_abstract_valuet> &result,
exprt lower_value,
exprt upper_value);
void EXPECT_UNMODIFIED(
std::shared_ptr<const value_set_abstract_objectt> &result,
bool modified,
const std::vector<exprt> &expected_values);
void EXPECT_UNMODIFIED(
merge_result<const value_set_abstract_objectt> &result,
const std::vector<exprt> &expected_values);
template <class value_typet = abstract_objectt>
void EXPECT_UNMODIFIED(abstract_objectt::combine_result const &result)
{
auto object = std::dynamic_pointer_cast<const value_typet>(result.object);
EXPECT_UNMODIFIED(object, result.modified);
}
void EXPECT_MODIFIED(
std::shared_ptr<const constant_abstract_valuet> &result,
bool modified,
exprt expected_value);
void EXPECT_MODIFIED(
merge_result<const constant_abstract_valuet> &result,
exprt expected_value);
void EXPECT_MODIFIED(
std::shared_ptr<const interval_abstract_valuet> &result,
bool modified,
exprt lower_value,
exprt upper_value);
void EXPECT_MODIFIED(
merge_result<const interval_abstract_valuet> &result,
exprt lower_value,
exprt upper_value);
void EXPECT_MODIFIED(
std::shared_ptr<const value_set_abstract_objectt> &result,
bool modified,
const std::vector<exprt> &expected_values);
void EXPECT_MODIFIED(
merge_result<const value_set_abstract_objectt> &result,
const std::vector<exprt> &expected_values);
template <class value_typet = abstract_objectt>
void EXPECT_MODIFIED(abstract_objectt::combine_result const &result)
{
auto object = std::dynamic_pointer_cast<const value_typet>(result.object);
EXPECT_MODIFIED(object, result.modified);
}
std::shared_ptr<const abstract_objectt> add(
const abstract_object_pointert &op1,
const abstract_object_pointert &op2,
abstract_environmentt &environment,
namespacet &ns);
std::shared_ptr<const constant_abstract_valuet> add_as_constant(
const abstract_object_pointert &op1,
const abstract_object_pointert &op2,
abstract_environmentt &environment,
namespacet &ns);
std::shared_ptr<const interval_abstract_valuet> add_as_interval(
const abstract_object_pointert &op1,
const abstract_object_pointert &op2,
abstract_environmentt &environment,
namespacet &ns);
std::shared_ptr<const value_set_abstract_objectt> add_as_value_set(
const abstract_object_pointert &op1,
const abstract_object_pointert &op2,
abstract_environmentt &environment,
namespacet &ns);
std::shared_ptr<const value_set_abstract_objectt> add_as_value_set(
const abstract_object_pointert &op1,
const abstract_object_pointert &op2,
const abstract_object_pointert &op3,
abstract_environmentt &environment,
namespacet &ns);
exprt to_expr(int v);
std::string expr_to_str(const exprt &expr);
std::string exprs_to_str(const std::vector<exprt> &values);
void THEN_PREDICATE(
const abstract_object_pointert &obj,
const std::string &out);
void THEN_PREDICATE(const abstract_environmentt &env, const std::string &out);
void THEN_PREDICATE(
const variable_sensitivity_domaint &domain,
const std::string &out);
#endif
|