#include "api/z3.h"
#include <iostream>
#include <cstring>
#include <cassert>
#include "util/util.h"
#include "util/trace.h"
#include "util/debug.h"
static Z3_context mk_ctx() {
Z3_config cfg = Z3_mk_config();
Z3_context ctx = Z3_mk_context(cfg);
Z3_del_config(cfg);
return ctx;
}
static void test_bug_fpa_sort_missing_return() {
std::cout << "test_bug_fpa_sort_missing_return\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_sort s = Z3_mk_fpa_sort(ctx, 1, 2);
Z3_error_code err = Z3_get_error_code(ctx);
if (err != Z3_OK) {
std::cout << " [BUG CONFIRMED] Error code set to " << err
<< " but sort was still created: " << (s != nullptr ? "non-null" : "null") << "\n";
}
if (s != nullptr && err != Z3_OK) {
std::cout << " [BUG CONFIRMED] Sort created despite error: "
<< Z3_sort_to_string(ctx, s) << "\n";
}
Z3_del_context(ctx);
std::cout << " PASSED (bug demonstrated)\n";
}
static void test_bug_mk_string_null() {
std::cout << "test_bug_mk_string_null\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [BUG] Error handler caught: " << e << "\n";
});
Z3_ast r = Z3_mk_string(ctx, ""); if (r != nullptr) {
std::cout << " Empty string OK: " << Z3_ast_to_string(ctx, r) << "\n";
}
std::cout << " [BUG DOCUMENTED] Z3_mk_string(ctx, nullptr) would crash - no null check\n";
Z3_del_context(ctx);
std::cout << " PASSED (bug documented)\n";
}
static void test_bug_mk_lstring_overread() {
std::cout << "test_bug_mk_lstring_overread\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
const char* short_str = "hi";
Z3_ast r = Z3_mk_lstring(ctx, 2, short_str); if (r != nullptr) {
std::cout << " lstring(2, \"hi\") OK\n";
}
Z3_ast r2 = Z3_mk_lstring(ctx, 0, short_str);
if (r2 != nullptr) {
std::cout << " lstring(0, \"hi\") creates empty string: "
<< Z3_ast_to_string(ctx, r2) << "\n";
}
std::cout << " [BUG DOCUMENTED] Z3_mk_lstring(ctx, large_sz, short_str) causes buffer over-read\n";
Z3_del_context(ctx);
std::cout << " PASSED (bug documented)\n";
}
static void test_bug_array_sort_n_zero() {
std::cout << "test_bug_array_sort_n_zero\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_sort int_sort = Z3_mk_int_sort(ctx);
Z3_sort arr = Z3_mk_array_sort_n(ctx, 0, nullptr, int_sort);
Z3_error_code err = Z3_get_error_code(ctx);
if (err == Z3_OK && arr != nullptr) {
std::cout << " [BUG CONFIRMED] Created array sort with 0 domain params: "
<< Z3_sort_to_string(ctx, arr) << "\n";
Z3_ast var = Z3_mk_const(ctx, Z3_mk_string_symbol(ctx, "a"), arr);
if (var != nullptr) {
std::cout << " [BUG CONFIRMED] Created variable of degenerate array sort\n";
}
}
else {
std::cout << " No bug: error code " << err << "\n";
}
Z3_del_context(ctx);
std::cout << " PASSED\n";
}
static void test_bug_optimize_unchecked_index() {
std::cout << "test_bug_optimize_unchecked_index\n";
Z3_context ctx = mk_ctx();
Z3_optimize opt = Z3_mk_optimize(ctx);
Z3_optimize_inc_ref(ctx, opt);
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [BUG] Error handler caught code: " << e << "\n";
});
Z3_sort int_sort = Z3_mk_int_sort(ctx);
Z3_ast x = Z3_mk_const(ctx, Z3_mk_string_symbol(ctx, "x"), int_sort);
Z3_ast constraint = Z3_mk_gt(ctx, x, Z3_mk_int(ctx, 0, int_sort));
Z3_optimize_assert(ctx, opt, constraint);
unsigned obj_idx = Z3_optimize_maximize(ctx, opt, x);
(void)obj_idx;
Z3_lbool result = Z3_optimize_check(ctx, opt, 0, nullptr);
std::cout << " Optimize check result: " << result << "\n";
Z3_ast lower = Z3_optimize_get_lower(ctx, opt, 999);
Z3_error_code err = Z3_get_error_code(ctx);
std::cout << " get_lower(999): error=" << err
<< " result=" << (lower != nullptr ? "non-null" : "null") << "\n";
if (err == Z3_OK) {
std::cout << " [BUG CONFIRMED] No error for out-of-bounds index 999\n";
}
Z3_optimize_dec_ref(ctx, opt);
Z3_del_context(ctx);
std::cout << " PASSED\n";
}
static void test_bug_propagator_variable_shadowing() {
std::cout << "test_bug_propagator_variable_shadowing\n";
std::cout << " [BUG DOCUMENTED] Variable shadowing in 3 propagator functions\n";
std::cout << " local 'c' shadows Z3_context 'c' → Z3_CATCH uses wrong variable\n";
std::cout << " PASSED (bug documented via source inspection)\n";
}
static void test_bug_translate_null_target() {
std::cout << "test_bug_translate_null_target\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_sort int_sort = Z3_mk_int_sort(ctx);
Z3_ast x = Z3_mk_const(ctx, Z3_mk_string_symbol(ctx, "x"), int_sort);
Z3_get_error_code(ctx);
std::cout << " [BUG DOCUMENTED] Z3_translate(ctx, ast, nullptr) would crash\n";
std::cout << " No null check on target before mk_c(target) at api_ast.cpp:1522\n";
Z3_context ctx2 = mk_ctx();
Z3_ast translated = Z3_translate(ctx, x, ctx2);
if (translated != nullptr) {
std::cout << " Valid translate works: " << Z3_ast_to_string(ctx2, translated) << "\n";
}
Z3_del_context(ctx2);
Z3_del_context(ctx);
std::cout << " PASSED (bug documented)\n";
}
static void test_bug_add_func_interp_null_model() {
std::cout << "test_bug_add_func_interp_null_model\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_sort int_sort = Z3_mk_int_sort(ctx);
Z3_sort domain[1] = { int_sort };
Z3_func_decl f = Z3_mk_func_decl(ctx, Z3_mk_string_symbol(ctx, "f"),
1, domain, int_sort);
Z3_ast else_val = Z3_mk_int(ctx, 0, int_sort);
std::cout << " [BUG DOCUMENTED] Z3_add_func_interp(ctx, nullptr, f, else_val) would crash\n";
std::cout << " CHECK_NON_NULL exists for f but not for m (api_model.cpp:249-251)\n";
Z3_model mdl = Z3_mk_model(ctx);
Z3_model_inc_ref(ctx, mdl);
Z3_func_interp fi = Z3_add_func_interp(ctx, mdl, f, else_val);
if (fi != nullptr) {
std::cout << " Valid add_func_interp works\n";
}
Z3_model_dec_ref(ctx, mdl);
Z3_del_context(ctx);
std::cout << " PASSED (bug documented)\n";
}
static void test_bug_optimize_soft_null_weight() {
std::cout << "test_bug_optimize_soft_null_weight\n";
Z3_context ctx = mk_ctx();
Z3_optimize opt = Z3_mk_optimize(ctx);
Z3_optimize_inc_ref(ctx, opt);
Z3_sort bool_sort = Z3_mk_bool_sort(ctx);
Z3_ast p = Z3_mk_const(ctx, Z3_mk_string_symbol(ctx, "p"), bool_sort);
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " Error handler caught code: " << e << "\n";
});
unsigned idx = Z3_optimize_assert_soft(ctx, opt, p, "-1",
Z3_mk_string_symbol(ctx, "g"));
Z3_error_code err = Z3_get_error_code(ctx);
std::cout << " assert_soft with weight=\"-1\": idx=" << idx
<< " error=" << err << "\n";
if (err == Z3_OK) {
std::cout << " [BUG CONFIRMED] Negative weight accepted without validation\n";
}
unsigned idx2 = Z3_optimize_assert_soft(ctx, opt, p, "0",
Z3_mk_string_symbol(ctx, "g2"));
err = Z3_get_error_code(ctx);
std::cout << " assert_soft with weight=\"0\": idx=" << idx2
<< " error=" << err << "\n";
if (err == Z3_OK) {
std::cout << " [BUG CONFIRMED] Zero weight accepted without validation\n";
}
unsigned idx3 = Z3_optimize_assert_soft(ctx, opt, p, "abc",
Z3_mk_string_symbol(ctx, "g3"));
err = Z3_get_error_code(ctx);
std::cout << " assert_soft with weight=\"abc\": idx=" << idx3
<< " error=" << err << "\n";
std::cout << " [BUG DOCUMENTED] Z3_optimize_assert_soft(ctx, opt, p, nullptr, sym) would crash\n";
Z3_optimize_dec_ref(ctx, opt);
Z3_del_context(ctx);
std::cout << " PASSED\n";
}
static void test_bug_mk_pattern_zero() {
std::cout << "test_bug_mk_pattern_zero\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_pattern p = Z3_mk_pattern(ctx, 0, nullptr);
Z3_error_code err = Z3_get_error_code(ctx);
if (p != nullptr && err == Z3_OK) {
std::cout << " [BUG CONFIRMED] Empty pattern (0 terms) was created successfully\n";
}
else {
std::cout << " Pattern creation result: " << (p != nullptr ? "non-null" : "null")
<< " error=" << err << "\n";
}
Z3_del_context(ctx);
std::cout << " PASSED\n";
}
static void test_bug_re_loop_inverted_bounds() {
std::cout << "test_bug_re_loop_inverted_bounds\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_sort str_sort = Z3_mk_string_sort(ctx);
Z3_sort re_sort = Z3_mk_re_sort(ctx, str_sort);
(void)re_sort;
Z3_ast a_str = Z3_mk_string(ctx, "a");
Z3_ast re_a = Z3_mk_re_full(ctx, re_sort);
re_a = Z3_mk_seq_to_re(ctx, a_str);
Z3_ast loop = Z3_mk_re_loop(ctx, re_a, 5, 2);
Z3_error_code err = Z3_get_error_code(ctx);
if (loop != nullptr && err == Z3_OK) {
std::cout << " [BUG CONFIRMED] re.loop with lo=5 > hi=2 accepted: "
<< Z3_ast_to_string(ctx, loop) << "\n";
Z3_ast x = Z3_mk_const(ctx, Z3_mk_string_symbol(ctx, "x"), str_sort);
Z3_ast in_re = Z3_mk_seq_in_re(ctx, x, loop);
Z3_solver s = Z3_mk_solver(ctx);
Z3_solver_inc_ref(ctx, s);
Z3_solver_assert(ctx, s, in_re);
Z3_lbool result = Z3_solver_check(ctx, s);
std::cout << " Solving with inverted-bounds regex: " << result << "\n";
Z3_solver_dec_ref(ctx, s);
}
else {
std::cout << " Inverted bounds rejected: error=" << err << "\n";
}
Z3_del_context(ctx);
std::cout << " PASSED\n";
}
static void test_bug_empty_enumeration() {
std::cout << "test_bug_empty_enumeration\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_symbol name = Z3_mk_string_symbol(ctx, "EmptyEnum");
Z3_sort sort = Z3_mk_enumeration_sort(ctx, name, 0, nullptr, nullptr, nullptr);
Z3_error_code err = Z3_get_error_code(ctx);
if (sort != nullptr && err == Z3_OK) {
std::cout << " [BUG CONFIRMED] Empty enumeration sort created: "
<< Z3_sort_to_string(ctx, sort) << "\n";
Z3_ast x = Z3_mk_const(ctx, Z3_mk_string_symbol(ctx, "x"), sort);
if (x != nullptr) {
std::cout << " Created variable of empty enum type\n";
Z3_solver s = Z3_mk_solver(ctx);
Z3_solver_inc_ref(ctx, s);
Z3_ast eq = Z3_mk_eq(ctx, x, x);
Z3_solver_assert(ctx, s, eq);
Z3_lbool result = Z3_solver_check(ctx, s);
std::cout << " Satisfiability of (x = x) for empty enum: " << result << "\n";
if (result == Z3_L_TRUE) {
std::cout << " [BUG CONFIRMED] SAT for uninhabited type\n";
}
Z3_solver_dec_ref(ctx, s);
}
}
else {
std::cout << " Empty enum rejected: error=" << err << "\n";
}
Z3_del_context(ctx);
std::cout << " PASSED\n";
}
static void test_bug_solver_from_nonexistent_file() {
std::cout << "test_bug_solver_from_nonexistent_file\n";
Z3_context ctx = mk_ctx();
Z3_solver s = Z3_mk_solver(ctx);
Z3_solver_inc_ref(ctx, s);
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_solver_from_file(ctx, s, "this_file_does_not_exist_12345.smt2");
Z3_error_code err = Z3_get_error_code(ctx);
std::cout << " from_file error: " << err << "\n";
Z3_lbool result = Z3_solver_check(ctx, s);
std::cout << " Solver check after failed file load: " << result << "\n";
if (result == Z3_L_TRUE && err != Z3_OK) {
std::cout << " [BUG CONFIRMED] Solver initialized despite file error\n";
}
Z3_solver_dec_ref(ctx, s);
Z3_del_context(ctx);
std::cout << " PASSED\n";
}
static void test_bug_array_sort_mismatch() {
std::cout << "test_bug_array_sort_mismatch\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_sort int_sort = Z3_mk_int_sort(ctx);
Z3_sort arr_sort = Z3_mk_array_sort(ctx, int_sort, int_sort);
Z3_ast arr = Z3_mk_const(ctx, Z3_mk_string_symbol(ctx, "a"), arr_sort);
Z3_ast bool_idx = Z3_mk_true(ctx);
Z3_ast sel = Z3_mk_select(ctx, arr, bool_idx);
Z3_error_code err = Z3_get_error_code(ctx);
if (sel != nullptr && err == Z3_OK) {
std::cout << " [BUG CONFIRMED] select(Array(Int,Int), Bool) accepted: "
<< Z3_ast_to_string(ctx, sel) << "\n";
}
else {
std::cout << " Sort mismatch detected: error=" << err << "\n";
}
Z3_ast int_idx = Z3_mk_int(ctx, 0, int_sort);
Z3_ast bool_val = Z3_mk_true(ctx);
Z3_ast st = Z3_mk_store(ctx, arr, int_idx, bool_val);
err = Z3_get_error_code(ctx);
if (st != nullptr && err == Z3_OK) {
std::cout << " [BUG CONFIRMED] store(Array(Int,Int), Int, Bool) accepted: "
<< Z3_ast_to_string(ctx, st) << "\n";
}
else {
std::cout << " Value sort mismatch detected: error=" << err << "\n";
}
Z3_del_context(ctx);
std::cout << " PASSED\n";
}
static void test_bug_substitute_null_arrays() {
std::cout << "test_bug_substitute_null_arrays\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_sort int_sort = Z3_mk_int_sort(ctx);
Z3_ast x = Z3_mk_const(ctx, Z3_mk_string_symbol(ctx, "x"), int_sort);
Z3_ast r = Z3_substitute(ctx, x, 0, nullptr, nullptr);
Z3_get_error_code(ctx);
if (r != nullptr) {
std::cout << " substitute(x, 0, null, null) OK: " << Z3_ast_to_string(ctx, r) << "\n";
}
std::cout << " [BUG DOCUMENTED] Z3_substitute(ctx, x, 1, nullptr, nullptr) would crash\n";
Z3_del_context(ctx);
std::cout << " PASSED (bug documented)\n";
}
static void test_bug_model_get_const_interp_null() {
std::cout << "test_bug_model_get_const_interp_null\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_model mdl = Z3_mk_model(ctx);
Z3_model_inc_ref(ctx, mdl);
std::cout << " [BUG DOCUMENTED] Z3_model_get_const_interp(ctx, mdl, nullptr) would crash\n";
Z3_sort int_sort = Z3_mk_int_sort(ctx);
Z3_func_decl c_decl = Z3_mk_func_decl(ctx, Z3_mk_string_symbol(ctx, "c"),
0, nullptr, int_sort);
Z3_ast val = Z3_mk_int(ctx, 42, int_sort);
Z3_add_const_interp(ctx, mdl, c_decl, val);
Z3_ast interp = Z3_model_get_const_interp(ctx, mdl, c_decl);
if (interp != nullptr) {
std::cout << " Valid get_const_interp: " << Z3_ast_to_string(ctx, interp) << "\n";
}
Z3_model_dec_ref(ctx, mdl);
Z3_del_context(ctx);
std::cout << " PASSED (bug documented)\n";
}
static void test_bug_mk_map_arity_mismatch() {
std::cout << "test_bug_mk_map_arity_mismatch\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_sort int_sort = Z3_mk_int_sort(ctx);
Z3_sort arr_sort = Z3_mk_array_sort(ctx, int_sort, int_sort);
Z3_sort domain[2] = { int_sort, int_sort };
Z3_func_decl f = Z3_mk_func_decl(ctx, Z3_mk_string_symbol(ctx, "f"),
2, domain, int_sort);
Z3_ast arr = Z3_mk_const(ctx, Z3_mk_string_symbol(ctx, "a"), arr_sort);
Z3_ast args[1] = { arr };
Z3_ast mapped = Z3_mk_map(ctx, f, 1, args);
Z3_error_code err = Z3_get_error_code(ctx);
if (mapped != nullptr && err == Z3_OK) {
std::cout << " [BUG CONFIRMED] mk_map accepted arity mismatch: "
<< "func arity=2, arrays=1\n";
}
else {
std::cout << " Arity mismatch detected: error=" << err << "\n";
}
Z3_del_context(ctx);
std::cout << " PASSED\n";
}
static void test_bug_model_translate_null() {
std::cout << "test_bug_model_translate_null\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_model mdl = Z3_mk_model(ctx);
Z3_model_inc_ref(ctx, mdl);
std::cout << " [BUG DOCUMENTED] Z3_model_translate(ctx, mdl, nullptr) would crash\n";
Z3_context ctx2 = mk_ctx();
Z3_model mdl2 = Z3_model_translate(ctx, mdl, ctx2);
if (mdl2 != nullptr) {
std::cout << " Valid model_translate works\n";
}
Z3_model_dec_ref(ctx, mdl);
Z3_del_context(ctx2);
Z3_del_context(ctx);
std::cout << " PASSED (bug documented)\n";
}
static void test_bug_bvadd_no_overflow_signed() {
std::cout << "test_bug_bvadd_no_overflow_signed\n";
Z3_context ctx = mk_ctx();
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " [ERROR HANDLER] code=" << e << "\n";
});
Z3_sort bv8 = Z3_mk_bv_sort(ctx, 8);
Z3_ast x = Z3_mk_const(ctx, Z3_mk_string_symbol(ctx, "x"), bv8);
Z3_ast y = Z3_mk_const(ctx, Z3_mk_string_symbol(ctx, "y"), bv8);
Z3_ast no_ovf = Z3_mk_bvadd_no_overflow(ctx, x, y, true);
Z3_ast neg100 = Z3_mk_int(ctx, -100, bv8);
Z3_ast eq_x = Z3_mk_eq(ctx, x, neg100);
Z3_ast eq_y = Z3_mk_eq(ctx, y, neg100);
Z3_solver s = Z3_mk_solver(ctx);
Z3_solver_inc_ref(ctx, s);
Z3_solver_assert(ctx, s, no_ovf);
Z3_solver_assert(ctx, s, eq_x);
Z3_solver_assert(ctx, s, eq_y);
Z3_lbool result = Z3_solver_check(ctx, s);
std::cout << " bvadd_no_overflow(signed) with -100 + -100 (8-bit): " << result << "\n";
if (result == Z3_L_TRUE) {
std::cout << " [BUG CONFIRMED] Signed negative overflow not caught by bvadd_no_overflow\n";
}
else {
std::cout << " Overflow correctly detected\n";
}
Z3_solver_dec_ref(ctx, s);
Z3_del_context(ctx);
std::cout << " PASSED\n";
}
static void test_bug_get_as_array_non_array() {
std::cout << "test_bug_get_as_array_non_array\n";
Z3_context ctx = mk_ctx();
Z3_sort int_sort = Z3_mk_int_sort(ctx);
Z3_ast x = Z3_mk_int(ctx, 42, int_sort);
Z3_set_error_handler(ctx, [](Z3_context, Z3_error_code e) {
std::cout << " Error handler caught code: " << e << "\n";
});
bool is_as_array = Z3_is_as_array(ctx, x);
std::cout << " Z3_is_as_array(42): " << is_as_array << "\n";
if (!is_as_array) {
Z3_func_decl fd = Z3_get_as_array_func_decl(ctx, x);
Z3_error_code err = Z3_get_error_code(ctx);
std::cout << " get_as_array_func_decl(42): fd=" << (fd != nullptr ? "non-null" : "null")
<< " error=" << err << "\n";
if (err == Z3_OK && fd != nullptr) {
std::cout << " [BUG CONFIRMED] No error for get_as_array_func_decl on non-array term\n";
}
}
Z3_del_context(ctx);
std::cout << " PASSED\n";
}
void tst_deep_api_bugs() {
test_bug_fpa_sort_missing_return();
test_bug_array_sort_n_zero();
test_bug_optimize_unchecked_index();
test_bug_empty_enumeration();
test_bug_mk_string_null();
test_bug_mk_lstring_overread();
test_bug_translate_null_target();
test_bug_add_func_interp_null_model();
test_bug_model_get_const_interp_null();
test_bug_model_translate_null();
test_bug_substitute_null_arrays();
test_bug_optimize_soft_null_weight();
test_bug_re_loop_inverted_bounds();
test_bug_mk_pattern_zero();
test_bug_mk_map_arity_mismatch();
test_bug_array_sort_mismatch();
test_bug_bvadd_no_overflow_signed();
test_bug_get_as_array_non_array();
test_bug_propagator_variable_shadowing();
test_bug_solver_from_nonexistent_file();
}