mirror of
https://github.com/Z3Prover/z3
synced 2025-08-08 04:01:22 +00:00
add the pdd evaluator and a unit test for it
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
parent
7eb1affc7b
commit
a9f09beb8e
2 changed files with 118 additions and 75 deletions
42
src/math/dd/pdd_eval.h
Normal file
42
src/math/dd/pdd_eval.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/*++
|
||||||
|
Copyright (c) 2019 Microsoft Corporation
|
||||||
|
|
||||||
|
Module Name:
|
||||||
|
|
||||||
|
dd_pdd.cpp
|
||||||
|
|
||||||
|
Abstract:
|
||||||
|
|
||||||
|
Poly DD package
|
||||||
|
|
||||||
|
Author:
|
||||||
|
|
||||||
|
Nikolaj Bjorner (nbjorner) 2019-12-23
|
||||||
|
Lev Nachmanson (levnach) 2019-12-23
|
||||||
|
|
||||||
|
Revision History:
|
||||||
|
|
||||||
|
--*/
|
||||||
|
#include "math/dd/dd_pdd.h"
|
||||||
|
|
||||||
|
namespace dd {
|
||||||
|
// calculates the value of a pdd expression based on the given values of the variables
|
||||||
|
class pdd_eval {
|
||||||
|
pdd_manager& m;
|
||||||
|
|
||||||
|
std::function<rational (unsigned)> m_var2val;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
pdd_eval(pdd_manager& m): m(m) {}
|
||||||
|
|
||||||
|
void operator=(std::function<rational (unsigned)>& i2v) { m_var2val = i2v; }
|
||||||
|
|
||||||
|
rational operator()(pdd const& p) {
|
||||||
|
if (p.is_val()) {
|
||||||
|
return p.val();
|
||||||
|
}
|
||||||
|
return (*this)(p.hi()) * m_var2val(p.var()) + (*this)(p.lo());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
#include "math/dd/dd_pdd.h"
|
#include "math/dd/dd_pdd.h"
|
||||||
|
#include "math/dd/pdd_eval.h"
|
||||||
|
|
||||||
namespace dd {
|
namespace dd {
|
||||||
static void test1() {
|
static void test1() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue