mirror of
https://github.com/Z3Prover/z3
synced 2025-05-12 10:14:42 +00:00
checkpoint
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
142bf71b35
commit
9359ab7ce5
124 changed files with 2 additions and 0 deletions
103
src/test/smt2print_parse.cpp
Normal file
103
src/test/smt2print_parse.cpp
Normal file
|
@ -0,0 +1,103 @@
|
|||
// This is to test the print-parse facilities over the API
|
||||
// for SMT-LIB2.
|
||||
|
||||
#include "z3.h"
|
||||
#include <iostream>
|
||||
|
||||
void test_print(Z3_context ctx, Z3_ast a) {
|
||||
Z3_set_ast_print_mode(ctx, Z3_PRINT_SMTLIB2_COMPLIANT);
|
||||
char const* spec1 = Z3_benchmark_to_smtlib_string(ctx, "test", 0, 0, 0, 0, 0, a);
|
||||
std::cout << spec1 << "\n";
|
||||
|
||||
Z3_ast b =
|
||||
Z3_parse_smtlib2_string(ctx,
|
||||
spec1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
|
||||
char const* spec2 = Z3_ast_to_string(ctx, b);
|
||||
std::cout << spec2 << "\n";
|
||||
}
|
||||
|
||||
void test_parseprint(char const* spec) {
|
||||
Z3_context ctx = Z3_mk_context(0);
|
||||
std::cout << spec << "\n";
|
||||
|
||||
Z3_ast a =
|
||||
Z3_parse_smtlib2_string(ctx,
|
||||
spec,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
|
||||
test_print(ctx, a);
|
||||
|
||||
Z3_del_context(ctx);
|
||||
}
|
||||
|
||||
void tst_smt2print_parse() {
|
||||
|
||||
// test basic datatypes
|
||||
char const* spec1 =
|
||||
"(declare-datatypes (T) ((list (nil) (cons (car T) (cdr list)))))\n"
|
||||
"(declare-const x Int)\n"
|
||||
"(declare-const l (list Int))\n"
|
||||
"(declare-fun f ((list Int)) Bool)\n"
|
||||
"(assert (f (cons x l)))\n";
|
||||
|
||||
test_parseprint(spec1);
|
||||
|
||||
// test basic arrays
|
||||
char const* spec2 =
|
||||
"(declare-const x Int)\n"
|
||||
"(declare-const a (Array Int Int))\n"
|
||||
"(declare-const b (Array (Array Int Int) Bool))\n"
|
||||
"(assert (select b a))\n"
|
||||
"(assert (= b ((as const (Array (Array Int Int) Bool)) true)))\n"
|
||||
"(assert (= b (store b a true)))\n"
|
||||
"(declare-const b1 (Array Bool Bool))\n"
|
||||
"(declare-const b2 (Array Bool Bool))\n"
|
||||
"(assert (= ((as const (Array Bool Bool)) false) ((_ map and) b1 b2)))\n";
|
||||
|
||||
// TBD: const, map, store
|
||||
|
||||
test_parseprint(spec2);
|
||||
|
||||
// Test mutually recursive datatypes
|
||||
char const* spec3 =
|
||||
"(declare-datatypes () ((list (nil) (cons (car tree) (cdr list))) (tree (leaf) (node (n list)))))\n"
|
||||
"(declare-const x tree)\n"
|
||||
"(declare-const l list)\n"
|
||||
"(declare-fun f (list) Bool)\n"
|
||||
"(assert (f (cons x l)))\n";
|
||||
|
||||
test_parseprint(spec3);
|
||||
|
||||
// Test arithmetic
|
||||
char const* spec4 =
|
||||
"(declare-const x Real)\n"
|
||||
"(declare-const y Int)\n"
|
||||
"(assert (= x 0.0))\n"
|
||||
"(assert (= y 6))\n"
|
||||
"(assert (> (/ x 1.4) (to_real y)))";
|
||||
|
||||
test_parseprint(spec4);
|
||||
|
||||
// Test bit-vectors
|
||||
char const* spec5 =
|
||||
"(declare-const x (_ BitVec 4))\n"
|
||||
"(declare-const y (_ BitVec 4))\n"
|
||||
"(assert (bvule x (bvmul y (concat ((_ extract 2 0) x) ((_ extract 3 3) #xf0)))))";
|
||||
|
||||
test_parseprint(spec5);
|
||||
|
||||
// Test ?
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue