def test_plus_negatives(self): r0 = Symbol("r0", REAL) r1 = Symbol("r1", REAL) p_1 = Real(1) m_1 = Real(-1) p_2 = Real(2) m_4 = Real(-4) # 4 * r0 + (-1) * r1 + 2 - 4 neg_r1 = Times(m_1, r1) m_4_r0 = Times(Real(4), r0) expr = Plus(m_4_r0, neg_r1, p_2, m_4) res = expr.simplify() self.assertValid(Equals(expr, res)) stack = [res] while stack: curr = stack.pop() if curr.is_plus(): stack.extend(curr.args()) elif curr.is_minus(): stack.extend(curr.args()) elif curr.is_times(): stack.extend(curr.args()) elif curr.is_constant(): self.assertNotEqual(curr, m_1) self.assertNotEqual(curr, p_1) elif not curr.is_symbol(): # unexpected expression type. self.assertTrue(False)
def test_simplifying_int_plus_changes_type_of_expression(self): varA = Symbol("At", INT) varB = Symbol("Bt", INT) get_type = get_env().stc.get_type f = Plus(varB, Int(1)) old_type = get_type(f) f = f.simplify() new_type = get_type(f) self.assertEqual(new_type, old_type)
def test_sum_all_negatives(self): r0 = Symbol("r0", REAL) r1 = Symbol("r1", REAL) m_1 = Real(-1) # -4 * r0 + (-1) * r1 neg_r1 = Times(m_1, r1) m_4_r0 = Times(Real(-4), r0) expr = Plus(m_4_r0, neg_r1) res = expr.simplify() self.assertValid(Equals(expr, res))
def test_plus_algebraic(self): from pysmt.constants import Numeral env = get_env() mgr = env.formula_manager r0 = Symbol("r0", REAL) p_2 = Real(2) m_5 = mgr._Algebraic(Numeral(-5)) m_3 = mgr._Algebraic(Numeral(-3)) # r0 + 2 - 5 expr = Plus(r0, p_2, m_5) res = expr.simplify() self.assertValid(Equals(expr, res)) self.assertIn(m_3, res.args())