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)
Beispiel #8
0
    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]
Beispiel #9
0
    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]
Beispiel #10
0
    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)
Beispiel #11
0
    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))
Beispiel #12
0
    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))
Beispiel #13
0
    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
        )
Beispiel #14
0
    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)
Beispiel #15
0
    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)
Beispiel #16
0
    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)
Beispiel #17
0
    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))
Beispiel #18
0
    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))
Beispiel #19
0
    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))
Beispiel #20
0
    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))
Beispiel #21
0
    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))
Beispiel #22
0
    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))