size_t default_constant_strategy(invariant_programt &program, const size_t max_length) { const typet type(cegis_default_integer_type()); const bv_spect spec(type); add_danger_constant(program, from_integer(spec.max_value().to_ulong(), type)); add_danger_constant(program, from_integer(0u, type)); return std::max(size_t(1u), literals_constant_strategy(program, max_length)); //return 2u + literals_constant_strategy(program, max_length); /*for (size_t i=0; i < max_length; ++i) { const side_effect_expr_nondett value(type); std::string name(NONDET_PREFIX); add_danger_constant(program, name+=integer2string(i), value); } return 2u + max_length + literals_constant_strategy(program, max_length);*/ }
size_t literals_constant_strategy(invariant_programt &program, const size_t max_length) { const std::vector<constant_exprt> lit(collect_literal_constants(program)); size_t max_word_width=0u; for (const constant_exprt &expr : lit) { add_danger_constant(program, expr); // XXX: Add negation of every constant? // if (!expr.is_zero()) add_danger_constant(program, unary_minus_exprt(expr)); max_word_width=std::max(max_word_width, get_min_word_width(expr)); } return max_word_width; }