@@ -100,3 +100,49 @@ TEST_CASE("polynomial::constructor") {
100100 CHECK (p_cp == p_cp_a);
101101 CHECK (ptr == p_mv_a.get_internal ());
102102}
103+
104+ TEST_CASE (" polynomial::evaluate" ) {
105+ Variable x (" x" );
106+ Variable y (" y" );
107+ Polynomial p1 = 1 * pow (x, 6 ) + 2 * pow (x, 5 ) + 3 * y - 1 ;
108+ Polynomial p2 = 1 * y * pow (x + 1 , 4 );
109+
110+ // full assignment
111+ Assignment a;
112+ a.set (x, -1 );
113+ a.set (y, 2 );
114+ CHECK (a.has (x));
115+ CHECK (a.has (y));
116+
117+ CHECK (evaluate (p1, a) == Value (4 ));
118+ CHECK (evaluate_constraint (p1, a, SignCondition::GE) == true );
119+ CHECK (evaluate_constraint (p1, a, SignCondition::LT) == false );
120+ CHECK (evaluate_constraint (p1, a, SignCondition::EQ) == false );
121+ CHECK (evaluate_constraint_subs (p1, a, SignCondition::GE) == 1 );
122+ CHECK (evaluate_constraint_subs (p1, a, SignCondition::LT) == 0 );
123+ CHECK (evaluate_constraint_subs (p1, a, SignCondition::EQ) == 0 );
124+
125+ CHECK (evaluate (p2, a) == Value (0 ));
126+ CHECK (evaluate_constraint (p2, a, SignCondition::GE) == true );
127+ CHECK (evaluate_constraint (p2, a, SignCondition::LT) == false );
128+ CHECK (evaluate_constraint (p2, a, SignCondition::EQ) == true );
129+ CHECK (evaluate_constraint_subs (p2, a, SignCondition::GE) == 1 );
130+ CHECK (evaluate_constraint_subs (p2, a, SignCondition::LT) == 0 );
131+ CHECK (evaluate_constraint_subs (p2, a, SignCondition::EQ) == 1 );
132+
133+ // partial assignment
134+ a.unset (y);
135+ CHECK (a.has (x));
136+ CHECK (!a.has (y));
137+
138+ CHECK (evaluate_constraint_subs (p1, a, SignCondition::GE) == -1 );
139+ CHECK (evaluate_constraint_subs (p1, a, SignCondition::LT) == -1 );
140+ CHECK (evaluate_constraint_subs (p1, a, SignCondition::EQ) == -1 );
141+
142+ CHECK (evaluate_constraint (p2, a, SignCondition::GE) == true );
143+ CHECK (evaluate_constraint (p2, a, SignCondition::LT) == false );
144+ CHECK (evaluate_constraint (p2, a, SignCondition::EQ) == true );
145+ CHECK (evaluate_constraint_subs (p2, a, SignCondition::GE) == 1 );
146+ CHECK (evaluate_constraint_subs (p2, a, SignCondition::LT) == 0 );
147+ CHECK (evaluate_constraint_subs (p2, a, SignCondition::EQ) == 1 );
148+ }
0 commit comments