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)
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))