示例#1
0
    def test_vma(self) -> None:
        # Regression test for a bug: When a canvas cell was painted over
        # after a VariantMakerFromAvails was created using it as a source,
        # the VariantMakerFromAvails would produce an invalid Consumer
        # (missing an operand).
        fm = FARGModel(
            slipnet=Slipnet(Graph.with_features([VariantMakerFromAvails()])))
        ca = fm.build(StepCanvas([Step([4, 5, 6])]))
        cr0 = CellRef(ca, 0)
        cr1 = CellRef(ca, 1)
        cr1.paint(Step([5, 2], StepDelta([6, 4], [2], '-')))

        # Consumer(12+5) will snag: 5 is avail but 12 is unavail
        co1 = fm.build(Consumer(operator=plus, operands=(12, 5), source=cr1))
        fm.run_agent(co1, num=2)
        vma: VariantMakerFromAvails = fm.the(
            VariantMakerFromAvails)  # type: ignore[assignment]
        assert vma, 'Consumer did not produce a VariantMakerFromAvails'
        self.assertEqual(vma.agent, co1)

        # Some other agent paints over cr1, removing the avail 5
        cr1.paint(Step([4, 11], StepDelta([6, 5], [11], '+')))

        #lenable(Agent, Codelet, Fizzle)
        fm.run_agent(vma)
        #ldisable_all()
        co2: Any = fm.built_by(vma)[0]
        assert isinstance(co2, Consumer), \
            f'built by {short(co2)}, not a Consumer'

        self.assertEqual(len(as_list(co2.operands)), 2)
        fm.run_agent(co2)  # Check for crash

        lp: Any = fm.built_by(co2)[0]
        self.assertIsInstance(lp, LitPainter)
示例#2
0
    def test_last_painted_cellref(self) -> None:
        ca = StepCanvas([Step([4, 5, 6])])
        cr0 = CellRef(ca, 0)
        cr1 = CellRef(ca, 1)
        cr2 = CellRef(ca, 2)

        self.assertEqual(ca.last_painted_addr(), 0)
        self.assertEqual(ca.last_painted_cellref(), cr0)
        self.assertEqual(list(ca.cellrefs()), [cr0])
        self.assertEqual(cr0.last_painted_cellref(), cr0)
        self.assertEqual(cr1.last_painted_cellref(), cr0)
        self.assertEqual(cr2.last_painted_cellref(), cr0)

        cr1.paint(Step([6, 9], StepDelta([4, 5], [9], '+')))

        self.assertEqual(ca.last_painted_addr(), 1)
        self.assertEqual(ca.last_painted_cellref(), cr1)
        self.assertEqual(list(ca.cellrefs()), [cr0, cr1])
        self.assertEqual(cr0.last_painted_cellref(), cr1)
        self.assertEqual(cr1.last_painted_cellref(), cr1)
        self.assertEqual(cr2.last_painted_cellref(), cr1)
示例#3
0
    def test_cellref_basics(self) -> None:
        ca = StepCanvas([Step([4, 5, 6])])
        cr0 = CellRef(ca, 0)
        cr1 = CellRef(ca, 1)

        # StepCanvas[0]
        self.assertEqual(cr0.value, Step([4, 5, 6]))
        self.assertCountEqual(as_iter(cr0.avails), [4, 5, 6])
        taken, remaining = cr0.take_avails([4, 5])
        self.assertCountEqual(taken, [4, 5])
        self.assertCountEqual(remaining, [6])
        self.assertEqual(cr0.value, Step([4, 5, 6]))
        self.assertTrue(cr0.has_a_value())

        self.assertTrue(cr0.has_avail_value(4))
        self.assertFalse(cr0.has_avail_value(7))

        with self.assertRaises(ValuesNotAvail) as cm:
            taken, remaining = cr0.take_avails([4, 7])
        self.assertEqual(
            cm.exception,
            ValuesNotAvail(cellref=cr0, avails=(4, None), unavails=(None, 7)))

        #StepCanvas[1]
        self.assertEqual(cr1.value, None)
        self.assertFalse(cr1.has_a_value())
        self.assertCountEqual(as_iter(cr1.avails), [])
        with self.assertRaises(ValuesNotAvail) as cm:
            taken, remaining = cr1.take_avails([4, 7])
        self.assertEqual(
            cm.exception,
            ValuesNotAvail(cellref=cr1, avails=(4, 7), unavails=()))

        # paint
        cr1.paint(Step([6], StepDelta([4, 5], [9], '+')))
        self.assertEqual(ca[1], Step([6], StepDelta([4, 5], [9], '+')))
示例#4
0
 def test_dead_end_detector(self) -> None:
     fm = FARGModel()
     ca = fm.build(self.pons_start_canvas())
     cr0 = CellRef(ca, 0)
     cr1 = CellRef(ca, 1)
     cr2 = CellRef(ca, 2)
     det = fm.build(
         DeadEndDetector(target=15,
                         startcell=cr0,
                         on_success=RaiseException(UTDeadEndFound)))
     fm.run_detector(det)  # no exception
     cr1.paint(self.step1)
     fm.run_detector(det)  # no exception
     cr2.paint(self.step2good)
     fm.run_detector(det)  # no exception
     cr2.paint(self.step2bad)
     with self.assertRaises(UTDeadEndFound) as cm:
         fm.run_detector(det)
     self.assertEqual(cm.exception, UTDeadEndFound(cr2))