def test_short_expression_finder_failure(self): # End users should never see these failures so it doesn't matter much how # exactly they fail. self.assertRaises(AssertionError, ShortExpressionFinder, []) self.assertRaises(AssertionError, ShortExpressionFinder, [('x', (1, 2)), ('no_values', ())]) self.assertRaises(TypeError, ShortExpressionFinder, [('bad_type', (1, 2.5))]) self.assertRaises(AssertionError, ShortExpressionFinder, [('bad name', (1, 2))]) self.assertRaises(AssertionError, ShortExpressionFinder, [('x', ('bad value', ))]) self.assertRaises(TypeError, ShortExpressionFinder, [('x', (1, 'mixed_values'))]) self.assertRaises( AssertionError, ShortExpressionFinder([('no_configs', (1, 2))]).get_expr, []) self.assertRaises( AssertionError, ShortExpressionFinder([('no_such_value', (1, 2))]).get_expr, [(3, )]) self.assertRaises( AssertionError, ShortExpressionFinder([('wrong_length', (1, 2))]).get_expr, [(1, 3)])
def check_expr(self, expr, variables_and_values): """Check that ShortExpressionFinder returns an expression that's logically equivalent to |expr| and equally simple, when given the matching configs. """ configs = matching_configs(expr, variables_and_values) output_expr = ShortExpressionFinder(variables_and_values).get_expr(configs) output_configs = matching_configs(output_expr, variables_and_values) self.assertEqual(configs, output_configs) self.assertEqual(expr.count('=='), output_expr.count('==')) self.assertEqual(expr.count('('), output_expr.count('('))
def check_expr(self, expr, variables_and_values): """Check that ShortExpressionFinder returns an expression that's logically equivalent to |expr| and equally simple, when given the matching configs. """ configs = matching_configs(expr, variables_and_values) output_expr = ShortExpressionFinder(variables_and_values).get_expr( configs) output_configs = matching_configs(output_expr, variables_and_values) self.assertEqual(configs, output_configs) self.assertEqual(expr.count('=='), output_expr.count('==')) self.assertEqual(expr.count('('), output_expr.count('('))
def test_two_variables_four_values(self): vals1, vals2 = (1, 2), ("ab", "cd") sef = ShortExpressionFinder([('var1', vals1), ('var2', vals2)]) all_configs = tuple(itertools.product(vals1, vals2)) for val1 in vals1: for val2 in vals2: self.assertEqual('var1==%d and var2=="%s"' % (val1, val2), sef.get_expr([(val1, val2)])) for val1 in vals1: self.assertEqual('var1==%d and (var2=="ab" or var2=="cd")' % val1, sef.get_expr([(val1, "ab"), (val1, "cd")])) for val2 in vals2: self.assertEqual('(var1==1 or var1==2) and var2=="%s"' % val2, sef.get_expr([(1, val2), (2, val2)])) self.assertEqual('(var1==1 or var1==2) and (var2=="ab" or var2=="cd")', sef.get_expr(all_configs))
def test_simple(self): sef = ShortExpressionFinder([('var', [17])]) self.assertEqual('var==17', sef.get_expr([(17,)]))
def test_simple(self): sef = ShortExpressionFinder([('var', [17])]) self.assertEqual('var==17', sef.get_expr([(17, )]))
def test_nones(self): ShortExpressionFinder([('foo', ('a', ))]) with self.assertRaises(TypeError): ShortExpressionFinder([('foo', ('a', None))])