Пример #1
0
    def test_sample(self):
        ic = constraint.IntConstraint(-5, 5)
        val = constraint.sample(ic)
        self.assertTrue(val <= 5)
        self.assertTrue(val >= -5)

        lc = constraint.ListConstraint(1, 4, [ic] * 4)
        val = constraint.sample(lc)
        self.assertTrue(len(val) <= 4)
        self.assertTrue(len(val) >= 1)

        for x in val:
            self.assertTrue(x <= 5)
            self.assertTrue(x >= -5)

        lc = constraint.ListConstraint(0, 0, [ic] * 4)
        val = constraint.sample(lc)
        self.assertEqual(val, [])

        with self.assertRaises(constraint.InvalidConstraintError) as context:
            ic = constraint.IntConstraint(1, 0)
            constraint.sample(ic)
            self.assertTrue(
                'invalid constraint {}'.format(ic) in context.exception)
        with self.assertRaises(constraint.InvalidConstraintError) as context:
            ic = constraint.IntConstraint(1, 0)
            lc = constraint.ListConstraint(1, 4, [ic] * 4)
            constraint.sample(lc)
            self.assertTrue(
                'invalid constraint {}'.format(lc) in context.exception)
Пример #2
0
 def test_null_allowed(self):
     p = Program.parse('LIST|TAIL,0|ACCESS,1,0')
     expected = [
         constraint.ListConstraint(lmin=1,
                                   int_constraints=[
                                       constraint.IntConstraint(0, l - 1)
                                       for l in range(constraint.L + 1)
                                   ]),
         constraint.IntConstraint(0, 256),
         constraint.IntConstraint()
     ]
     output_constraint = constraint.IntConstraint()
     actual = constraint.propagate_constraints(p, output_constraint)
     self.assertEqual(expected, actual)
Пример #3
0
    def test_propagate(self):
        stmts = [
            (impl.MAP, (impl.TIMES2, 0)),
            (impl.FILTER, (impl.GT0, 1)),
            (impl.MAP, (impl.MINUS1, 2)),
        ]

        p = Program([LIST], stmts)

        output_constraint = constraint.ListConstraint(
            1, 4, [constraint.IntConstraint(-5, 3)] * 5)
        actual = constraint.propagate_constraints(p, output_constraint)[0]
        expected = constraint.ListConstraint(
            1, 4, [constraint.IntConstraint(-2, 2)] * 5)

        self.assertEqual(expected, actual)
Пример #4
0
    def test_clip(self):
        expectedmap = {
            impl.PLUS1: constraint.IntConstraint(-256, 255),
        }

        ic = constraint.IntConstraint()
        for lmbda, expected in expectedmap.items():
            ics = [ic] * 4
            lc = constraint.ListConstraint(1, 4, ics)
            stmt = impl.MAP, (lmbda, 0)

            lc1 = constraint.get_constraints_from_stmt(stmt, lc)[0]

            self.assertEqual(lc.lmin, lc1.lmin)
            self.assertEqual(lc.lmax, lc1.lmax)
            for ic1 in lc1.int_constraints:
                self.assertEqual(ic1, expected)
Пример #5
0
    def test_zipwith_constraints(self):
        expectedmap = {
            impl.LPLUS: constraint.IntConstraint(-5, 2),
            impl.LMINUS: constraint.IntConstraint(-5, 2),
            impl.LTIMES: constraint.IntConstraint(-2, 2),
        }

        ic = constraint.IntConstraint(-10, 4)
        for lmbda, expected in expectedmap.items():
            ics = [ic] * 4
            expected_lc = constraint.ListConstraint(1, 4, ics)
            stmt = impl.ZIPWITH, (lmbda, 0, 1)

            actual_lcs = constraint.get_constraints_from_stmt(
                stmt, expected_lc)

            for actual_lc in actual_lcs:
                self.assertEqual(expected_lc.lmin, actual_lc.lmin)
                self.assertEqual(expected_lc.lmax, actual_lc.lmax)
                for actual_ic in actual_lc.int_constraints:
                    self.assertEqual(actual_ic, expected)
Пример #6
0
    def test_scan1l_constraints(self):
        INTMIN = constraint.INTMIN
        INTMAX = constraint.INTMAX
        expectedmap = {
            impl.LPLUS:
            constraint.ListConstraint(1, 4, [constraint.IntConstraint()] + [
                constraint.IntConstraint(int(INTMIN / l), int(INTMAX / l))
                for l in range(1, 5)
            ]),
            impl.LMINUS:
            constraint.ListConstraint(1, 4, [constraint.IntConstraint()] + [
                constraint.IntConstraint(int(INTMIN / l), int(INTMAX / l))
                for l in range(1, 5)
            ]),
            impl.LTIMES:
            constraint.ListConstraint(1, 4, [constraint.IntConstraint()] + [
                constraint.IntConstraint(-int(10**(np.log10(INTMAX) / l)),
                                         int(10**(np.log10(INTMAX) / l)))
                for l in range(1, 5)
            ]),
        }

        output_lc = constraint.ListConstraint(1, 4)
        for lmbda, expected in expectedmap.items():
            stmt = impl.SCAN1L, (lmbda, 0)
            actual = constraint.get_constraints_from_stmt(stmt, output_lc)[0]
            self.assertEqual(expected, actual)
Пример #7
0
    def test_map_constraints(self):
        expectedmap = {
            impl.PLUS1: constraint.IntConstraint(-11, 3),
            impl.MINUS1: constraint.IntConstraint(-9, 5),
            impl.TIMES2: constraint.IntConstraint(-5, 2),
            impl.TIMES3: constraint.IntConstraint(-3, 1),
            impl.TIMES4: constraint.IntConstraint(-2, 1),
            impl.TIMESNEG1: constraint.IntConstraint(-4, 10),
            impl.POW2: constraint.IntConstraint(-2, 2)
        }

        ic = constraint.IntConstraint(-10, 4)
        for lmbda, expected in expectedmap.items():
            ics = [ic] * 4
            lc = constraint.ListConstraint(1, 4, ics)
            stmt = impl.MAP, (lmbda, 0)

            lc1 = constraint.get_constraints_from_stmt(stmt, lc)[0]

            self.assertEqual(lc.lmin, lc1.lmin)
            self.assertEqual(lc.lmax, lc1.lmax)
            for ic1 in lc1.int_constraints:
                self.assertEqual(ic1, expected)