3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-10 11:17:07 +00:00
z3/test/fingerprint.cpp
Leonardo de Moura 68269c43a6 other components
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2012-10-02 11:48:48 -07:00

102 lines
2.8 KiB
C++

/*++
Copyright (c) 2006 Microsoft Corporation
Module Name:
fingerprint.cpp
Abstract:
Test fingerprint support
Author:
Leonardo de Moura (leonardo) 2006-10-29.
Revision History:
--*/
#include"core_theory.h"
bool add_fingerprint(core_theory & t, void * data, enode * n1) {
enode * c[1];
c[0] = n1;
return t.add_fingerprint(data, 1, c);
}
bool add_fingerprint(core_theory & t, void * data, enode * n1, enode * n2) {
enode * c[2];
c[0] = n1;
c[1] = n2;
return t.add_fingerprint(data, 2, c);
}
bool add_fingerprint(core_theory & t, void * data, enode * n1, enode * n2, enode * n3, enode * n4, enode * n5, enode * n6, enode * n7, enode * n8, enode * n9) {
enode * c[9];
c[0] = n1;
c[1] = n2;
c[2] = n3;
c[3] = n4;
c[4] = n5;
c[5] = n6;
c[6] = n7;
c[7] = n8;
c[8] = n9;
return t.add_fingerprint(data, 9, c);
}
class fingerprint_tester {
static void tst1() {
core_theory t;
enode * n1 = t.mk_const();
enode * n2 = t.mk_const();
enode * n3 = t.mk_const();
void * d1 = reinterpret_cast<void *>(1);
SASSERT(add_fingerprint(t, 0, n1));
SASSERT(!add_fingerprint(t, 0, n1));
SASSERT(add_fingerprint(t, 0, n2));
SASSERT(add_fingerprint(t, d1, n1));
SASSERT(!add_fingerprint(t, d1, n1));
SASSERT(add_fingerprint(t, d1, n2));
SASSERT(add_fingerprint(t, d1, n1, n2));
SASSERT(add_fingerprint(t, d1, n2, n1));
SASSERT(!add_fingerprint(t, d1, n1, n2));
SASSERT(!add_fingerprint(t, d1, n2, n1));
t.push_scope();
SASSERT(add_fingerprint(t, 0, n3));
SASSERT(add_fingerprint(t, d1, n3));
SASSERT(add_fingerprint(t, d1, n1, n1, n1, n1, n1, n1, n2, n1, n2));
SASSERT(!add_fingerprint(t, d1, n1, n1, n1, n1, n1, n1, n2, n1, n2));
SASSERT(add_fingerprint(t, d1, n1, n1, n1, n1, n1, n1, n2, n1, n1));
SASSERT(!add_fingerprint(t, d1, n1, n1, n1, n1, n1, n1, n2, n1, n1));
t.pop_scope(1);
SASSERT(!add_fingerprint(t, 0, n1));
SASSERT(!add_fingerprint(t, 0, n2));
SASSERT(!add_fingerprint(t, d1, n1, n2));
SASSERT(!add_fingerprint(t, d1, n2, n1));
SASSERT(add_fingerprint(t, 0, n3));
SASSERT(add_fingerprint(t, d1, n3));
SASSERT(add_fingerprint(t, d1, n1, n1, n1, n1, n1, n1, n2, n1, n2));
SASSERT(!add_fingerprint(t, d1, n1, n1, n1, n1, n1, n1, n2, n1, n2));
SASSERT(add_fingerprint(t, d1, n1, n1, n1, n1, n1, n1, n2, n1, n1));
SASSERT(!add_fingerprint(t, d1, n1, n1, n1, n1, n1, n1, n2, n1, n1));
}
public:
static void run_tests() {
tst1();
}
};
void tst_fingerprint() {
fingerprint_tester::run_tests();
}