def test_instantiate_expr_two_indices(self): result = _instantiate_expr(parse_expr("Forall (i,j) a_i_j=1"), 2, False) expected = parse_expr("a_0_1=1 * a_1_0=1") result_data = _get_sorted_conjuncts_str(result) expected_data = _get_sorted_conjuncts_str(expected) self.assertEqual(expected_data, result_data)
def test_instantiate_expr_two_indices(self): result = _instantiate_expr(parse_expr('Forall (i,j) a_i_j=1'), 2, False) expected = parse_expr('a_0_1=1 * a_1_0=1') result_data = _get_sorted_conjuncts_str(result) expected_data = _get_sorted_conjuncts_str(expected) self.assertEqual(expected_data, result_data)
def test_instantiate_property_cutoff4(self): property = SpecProperty([parse_expr("Forall (i) a_i = 1")], [parse_expr("Forall(j) b_j=1")]) result = inst_property(property, 4) expected = SpecProperty([parse_expr("a_0=1 * a_1=1 * a_2=1 * a_3=1")], [parse_expr("b_0=1")]) result_data = _convert_conjunction_to_str(result) expected_data = _convert_conjunction_to_str(expected) self.assertEqual(expected_data, result_data)
def test_instantiate_property_cutoff2(self): property = SpecProperty([Bool(True)], [parse_expr('Forall(j) b_j=1')]) result = inst_property(property, 2) expected = SpecProperty([Bool(True)], [parse_expr('b_0=1')]) result_data = _convert_conjunction_to_str(result) expected_data = _convert_conjunction_to_str(expected) self.assertEqual(expected_data, result_data)
def test_instantiate_property_cutoff2(self): property = SpecProperty([Bool(True)], [parse_expr("Forall(j) b_j=1")]) result = inst_property(property, 2) expected = SpecProperty([Bool(True)], [parse_expr("b_0=1")]) result_data = _convert_conjunction_to_str(result) expected_data = _convert_conjunction_to_str(expected) self.assertEqual(expected_data, result_data)
def test_instantiate_property_cutoff_another_4(self): property = SpecProperty([Bool(True)], [parse_expr("Forall(j,k) b_j=1 -> c_k=1")]) result = inst_property(property, 4) expected = SpecProperty([Bool(True)], [parse_expr("(b_0=1 -> c_1=1) * (b_0=1 -> c_2=1) * (b_0=1 -> c_3=1)")]) result_data = _convert_conjunction_to_str(result) expected_data = _convert_conjunction_to_str(expected) self.assertEqual(expected_data, result_data)
def test_instantiate_property_cutoff4(self): property = SpecProperty([parse_expr('Forall (i) a_i = 1')], [parse_expr('Forall(j) b_j=1')]) result = inst_property(property, 4) expected = SpecProperty([parse_expr('a_0=1 * a_1=1 * a_2=1 * a_3=1')], [parse_expr('b_0=1')]) result_data = _convert_conjunction_to_str(result) expected_data = _convert_conjunction_to_str(expected) self.assertEqual(expected_data, result_data)
def get_async_hub_assumptions(self) -> list: """ Return [Forall(i) G(tok_i -> !sends_prev_i), Forall(i) G(!tok_i -> F(sends_prev_i))] """ expr1 = parse_expr('Forall(i) G({tok}_i=1 -> {sends_prev}_i=0)'.format( tok=HAS_TOK_NAME, sends_prev=SENDS_PREV_NAME)) expr2 = parse_expr( 'Forall(i) G({tok}_i=0 -> F(({sends_prev}_i=1) ))'.format( tok=HAS_TOK_NAME, sends_prev=SENDS_PREV_NAME)) return [expr1, expr2]
def get_async_hub_assumptions(self) -> list: """ Return [Forall(i) G(tok_i -> !sends_prev_i), Forall(i) G(!tok_i -> F(sends_prev_i))] """ expr1 = parse_expr('Forall(i) G({tok}_i=1 -> {sends_prev}_i=0)'.format( tok=HAS_TOK_NAME, sends_prev=SENDS_PREV_NAME)) expr2 = parse_expr('Forall(i) G({tok}_i=0 -> F(({sends_prev}_i=1) ))'.format( tok=HAS_TOK_NAME, sends_prev=SENDS_PREV_NAME)) return [expr1, expr2]
def test_instantiate_property_cutoff_another_4(self): property = SpecProperty([Bool(True)], [parse_expr('Forall(j,k) b_j=1 -> c_k=1')]) result = inst_property(property, 4) expected = SpecProperty([Bool(True)], [ parse_expr( '(b_0=1 -> c_1=1) * (b_0=1 -> c_2=1) * (b_0=1 -> c_3=1)') ]) result_data = _convert_conjunction_to_str(result) expected_data = _convert_conjunction_to_str(expected) self.assertEqual(expected_data, result_data)
def test_fix_indices_main(self): expr = parse_expr("Forall(i,j,k,m) (a_i_j_k=1 * b_i_m=1)") result = _fix_indices({"i": 1, "j": 2, "k": 3}, expr) expected_result = ForallExpr(["m"], BinOp("*", _get_is_true("a", 1, 2, 3), _get_is_true("b", 1, "m"))) self.assertEqual(str(expected_result), str(result))
def test_fix_indices_main(self): expr = parse_expr('Forall(i,j,k,m) (a_i_j_k=1 * b_i_m=1)') result = _fix_indices({'i': 1, 'j': 2, 'k': 3}, expr) expected_result = ForallExpr(['m'], BinOp('*', _get_is_true('a', 1, 2, 3), _get_is_true('b', 1, 'm'))) self.assertEqual(str(expected_result), str(result))
def test_localize_one_ass_one_gua(self): """ forall(i) a_i -> forall(j) b_j replaced by forall(i) (a_i -> b_i) """ prop = SpecProperty([parse_expr("Forall (i) a_i=1")], [parse_expr("Forall (j) b_j=1")]) localized_prop = localize(prop) expected_prop_i = SpecProperty([Bool(True)], [parse_expr("Forall (i) a_i=1 -> b_i=1")]) expected_prop_j = SpecProperty([Bool(True)], [parse_expr("Forall (j) a_j=1 -> b_j=1")]) expected_prop_str_i = str(expected_prop_i) expected_prop_str_j = str(expected_prop_j) localized_prop_str = str(localized_prop) assert localized_prop_str == expected_prop_str_i or localized_prop_str == expected_prop_str_j, str( localized_prop_str )
def test_localize_one_ass_one_gua(self): """ forall(i) a_i -> forall(j) b_j replaced by forall(i) (a_i -> b_i) """ prop = SpecProperty([parse_expr('Forall (i) a_i=1')], [parse_expr('Forall (j) b_j=1')]) localized_prop = localize(prop) expected_prop_i = SpecProperty( [Bool(True)], [parse_expr('Forall (i) a_i=1 -> b_i=1')]) expected_prop_j = SpecProperty( [Bool(True)], [parse_expr('Forall (j) a_j=1 -> b_j=1')]) expected_prop_str_i = str(expected_prop_i) expected_prop_str_j = str(expected_prop_j) localized_prop_str = str(localized_prop) assert localized_prop_str == expected_prop_str_i \ or localized_prop_str == expected_prop_str_j, str(localized_prop_str)
def test_sched_visual(self): scheduler = InterleavingScheduler() forall_expr = normalize_conjuncts([parse_expr("Forall(i) a_i=1"), scheduler.assumptions[0]]) instantiated_expr = _instantiate_expr(forall_expr, 4, False) # GFsched_0=1 * GFsched_1=1 result_expr = _apply_log_bit_optimization("sch", instantiated_expr, 4, scheduler) print( """::test_sched_visual:: Check visually the correctness. The original expr is Forall(i) a_i=1 * GFfair_sched_i=1, after scheduler_log_bit optimization and instantiation with cutoff=4 it is expected to receive a_0=1 * a_1=1 * a_2=1 * a_3=1 * GF(sch0=0 * sch1=0) * GF(sch0=0 * sch1=1) * GF(sch0=1 * sch1=0) * GF(sch0=1 * sch1=1) """, result_expr, ) print("The result is") print(result_expr)
def test_sched_visual(self): scheduler = InterleavingScheduler() forall_expr = normalize_conjuncts( [parse_expr('Forall(i) a_i=1'), scheduler.assumptions[0]]) instantiated_expr = _instantiate_expr( forall_expr, 4, False) # GFsched_0=1 * GFsched_1=1 result_expr = _apply_log_bit_optimization('sch', instantiated_expr, 4, scheduler) print( '''::test_sched_visual:: Check visually the correctness. The original expr is Forall(i) a_i=1 * GFfair_sched_i=1, after scheduler_log_bit optimization and instantiation with cutoff=4 it is expected to receive a_0=1 * a_1=1 * a_2=1 * a_3=1 * GF(sch0=0 * sch1=0) * GF(sch0=0 * sch1=1) * GF(sch0=1 * sch1=0) * GF(sch0=1 * sch1=1) ''', result_expr) print('The result is') print(result_expr)
def test_instantiate_expr_one_index(self): result = _instantiate_expr(parse_expr('Forall (i) a_i=1'), 2, False) expected = parse_expr('a_0=1 * a_1=1') self.assertEqual(str(expected), str(result))
def test_instantiate_expr_not_quantified(self): result = _instantiate_expr(parse_expr('a_1=1'), 2, False) expected = parse_expr('a_1=1') self.assertEqual(str(expected), str(result))
def test_instantiate_expr_not_quantified(self): result = _instantiate_expr(parse_expr("a_1=1"), 2, False) expected = parse_expr("a_1=1") self.assertEqual(str(expected), str(result))
def test_replace_indices(self): expr = parse_expr('Forall (i,j) (a_i_j=1 * b_j=1)') result = _replace_indices({'i': 'k', 'j': 'm'}, expr) expected = parse_expr('Forall (k,m) (a_k_m=1 * b_m=1)') self.assertEqual(str(expected), str(result))
def test_instantiate_expr_one_index(self): result = _instantiate_expr(parse_expr("Forall (i) a_i=1"), 2, False) expected = parse_expr("a_0=1 * a_1=1") self.assertEqual(str(expected), str(result))
def test_replace_indices(self): expr = parse_expr("Forall (i,j) (a_i_j=1 * b_j=1)") result = _replace_indices({"i": "k", "j": "m"}, expr) expected = parse_expr("Forall (k,m) (a_k_m=1 * b_m=1)") self.assertEqual(str(expected), str(result))