def test_Switch_simple(self):
        _, (a, b, c) = self.sigs_by_n(3)
        stm = \
        Switch(a)\
        .Case(0,
            b(1)
        ).Default(
            b(0)
        )

        stm._replace_input(a, c)
        stm_ref = \
        Switch(c)\
        .Case(0,
            b(1)
        ).Default(
            b(0)
        )
        self.assertTrue(stm.isSame(stm_ref), [stm, stm_ref])
        self.assertNotIn(stm, a.endpoints)
        self.assertIn(stm, c.endpoints)
Exemple #2
0
    def test_SwitchContainer_cut_off_drivers_of(self):
        nl = RtlNetlist()
        a = nl.sig("a", BIT)
        b = nl.sig("b", BIT)
        c = nl.sig("c", BIT)

        # reduce everything
        s0 = Switch(a).add_cases([(hBit(0), [
            b(0),
        ])])
        s0_0 = s0._cut_off_drivers_of(b)
        self.assertIs(s0, s0_0)
        s0_1 = Switch(a).add_cases([(hBit(0), [
            b(0),
        ])])
        self.assertTrue(s0.isSame(s0_1))

        # reduce nothing
        s0 = Switch(a).add_cases([(hBit(0), [
            b(0),
        ])])
        s0_0 = s0._cut_off_drivers_of(a)
        self.assertIsNone(s0_0)
        self.assertTrue(s0.isSame(s0_1))

        # reduce a single case
        s1 = Switch(a).add_cases([
            (hBit(0), [
                b(0),
            ]),
            (hBit(1), [
                c(0),
            ]),
        ])
        s1_0 = s1._cut_off_drivers_of(c)
        s1_cut = Switch(a).add_cases([
            (hBit(1), [
                c(0),
            ]),
        ])
        self.assertTrue(s1_0.isSame(s1_cut))
        self.assertSetEqual(set(s1._outputs), {b})
        self.assertSetEqual(set(s1_0._outputs), {c})

        self.assertTrue(s1.isSame(s0))

        # reduce default
        s2 = Switch(a).add_cases([
            (hBit(0), [
                b(1),
            ]),
            (hBit(1), [
                b(0),
            ]),
        ]).Default(c(1))
        s2_0 = s2._cut_off_drivers_of(c)
        s2_rem = Switch(a).add_cases([
            (hBit(0), [
                b(1),
            ]),
            (hBit(1), [
                b(0),
            ]),
        ])
        s2_cut = Switch(a).add_cases([
            (hBit(0), []),
            (hBit(1), []),
        ]).Default(c(1))
        self.assertTrue(s2.isSame(s2_rem))
        self.assertTrue(s2_0.isSame(s2_cut))