def test_expression_to_str(self): e = Expression({ Variable('x1'): -2, Variable('pi'): 5, Variable('x2'): -3 }) self.assertEqual(str(e), '5pi - 2x1 - 3x2')
def test_expression_parse_negative_coefficient(self): e = Expression('-x + 4y - 3z') self.assertEqual(e, Expression({ Variable('x'): -1, Variable('y'): 4, Variable('z'): -3 }))
def test_variables_ordered_by_symbol(self): var_list = sorted([Variable('b'), Variable('cd'), Variable('a'), Variable('cc')]) self.assertEqual(var_list, [Variable('a'), Variable('b'), Variable('cc'), Variable('cd')])
def test_variables_not_equals(self): self.assertNotEqual(Variable('x'), Variable('y'))
def test_variable_neg(self): self.assertEqual(-Variable('x'), Expression('-x'))
def test_variable_rmul_number(self): self.assertEqual(3 * Variable('x'), Expression('3x'))
def test_variable_mul_one(self): self.assertEqual(Variable('x') * 1, Variable('x'))
def test_variable_rsub_number(self): self.assertEqual(4 - Variable('x'), Expression('4 - x'))
def test_variable_init_underscore_symbol(self): v = Variable('x_y')
def test_expression_parse_no_space(self): e = Expression('x+3f+6h+10') self.assertEqual(e, Expression({ Variable('x'): 1, Variable('f'): 3, Variable('h'): 6 }, 10))
def test_expression_parse_large_coefficient(self): e = Expression('x + 4200y') self.assertEqual(e, Expression({ Variable('x'): 1, Variable('y'): 4200 }))
def test_variable_init_number_symbol(self): v = Variable('x2')
def test_expression_parse_long_variable_symbols(self): e = Expression('-2x1 + 5pi - 3x2') self.assertEqual(e, Expression({ Variable('x1'): -2, Variable('pi'): 5, Variable('x2'): -3 }))
def test_expression_parse_zero_coefficient(self): e = Expression('2x + 0y + 4') self.assertEqual(e, Expression({ Variable('x'): 2 }, 4))
def test_variable_radd_number(self): self.assertEqual(1 + Variable('x'), Expression('x + 1'))
def test_variable_init_invalid_number(self): with self.assertRaises(ValueError): v = Variable('45x')
def test_variable_sub_number(self): self.assertEqual(Variable('x') - 4, Expression('x - 4'))
def test_variable_symbol(self): self.assertEqual(Variable('x').symbol, 'x')
def test_variable_mul_zero(self): self.assertEqual(Variable('x') * 0, 0)
def test_variable_simplify_returns_self(self): self.assertEqual(Variable('y').simplify(), Variable('y'))
def test_variable_mul_number(self): self.assertEqual(Variable('x') * 2, Expression('2x'))
def test_variable_substitute(self): self.assertEqual(Variable('x').substitute(lambda v: {'x': 567}.get(v.symbol, v)), 567)
def test_variable_div_number(self): self.assertEqual(Variable('x')/1, Variable('x'))
def test_variable_substitute_unknown(self): self.assertEqual(Variable('x').substitute(lambda v: v), Variable('x'))
def test_variables_equals_true(self): self.assertEqual(Variable('x'), Variable('x'))
def test_variable_substitute_multiple(self): self.assertEqual(Variable('x').substitute(lambda v: {'y': 123, 'x': 56}.get(v.symbol, v)), 56)
def test_variable_not_equals_number(self): self.assertNotEqual(Variable('x'), 5)
def test_variable_add_number(self): self.assertEqual(Variable('x') + 1, Expression('x + 1'))
def test_variable_hash(self): self.assertEqual(hash(Variable('xyz')), hash(Variable('xyz')))
def test_expression_parse_multiple_occurences(self): e = Expression('x + 4y + 2x') self.assertEqual(e, Expression({ Variable('x'): 3, Variable('y'): 4 }))