def test_torch_plus_y_iter_inputs(self): """ A torch with +y orientation sits on top of a block. """ torch = Torch((0, 1, 0), blocks["redstone-torch"].slot, blocks["redstone-torch"].orientation("+y")) self.assertTrue((0, 0, 0) in torch.iter_inputs())
def test_torch_block_change(self): """ Torches change block type depending on their status. They don't change metadata, though. """ metadata = blocks["redstone-torch"].orientation("-x") torch = Torch((0, 0, 0), blocks["redstone-torch"].slot, metadata) torch.status = False self.assertEqual( torch.to_block(blocks["redstone-torch"].slot, metadata), (blocks["redstone-torch-off"].slot, metadata))
def test_torch_plus_z_input_output(self): """ A torch with +z orientation accepts input from one block, and sends output to three blocks around it. """ torch = Torch((0, 0, 0), blocks["redstone-torch"].slot, blocks["redstone-torch"].orientation("+z")) self.assertTrue((0, 0, -1) in torch.iter_inputs()) self.assertTrue((0, 0, 1) in torch.iter_outputs()) self.assertTrue((1, 0, 0) in torch.iter_outputs()) self.assertTrue((-1, 0, 0) in torch.iter_outputs())
def test_torch_wire(self): """ Wires will connect to torches. """ asic = Asic() wire = Wire((0, 0, 0), blocks["redstone-wire"].slot, 0x0) torch = Torch((0, 0, 1), blocks["redstone-torch"].slot, blocks["redstone-torch"].orientation("-z")) wire.connect(asic) torch.connect(asic) self.assertTrue(wire in torch.outputs) self.assertTrue(torch in wire.inputs)
def test_update_wires_single(self): torch = Torch((0, 0, 0), blocks["redstone-torch-off"].slot, blocks["redstone-torch"].orientation("-x")) wire = Wire((1, 0, 0), blocks["redstone-wire"].slot, 0x0) plain = PlainBlock((2, 0, 0), blocks["sand"].slot, 0x0) torch.connect(self.asic) wire.connect(self.asic) plain.connect(self.asic) wires, outputs = self.asic.update_wires(1, 0, 0) self.assertTrue(wire in wires) self.assertTrue(plain in outputs) self.assertFalse(wire.status) self.assertEqual(wire.metadata, 0)
def test_find_wires_inputs_many(self): inputs = set([ Wire((0, 0, 0), blocks["redstone-wire"].slot, 0x0), Wire((2, 0, 1), blocks["redstone-wire"].slot, 0x0), ]) wires = set([ Wire((1, 0, 0), blocks["redstone-wire"].slot, 0x0), Wire((2, 0, 0), blocks["redstone-wire"].slot, 0x0), ]) wires.update(inputs) torches = set([ Torch((0, 0, 1), blocks["redstone-torch"].slot, blocks["redstone-torch"].orientation("-z")), Torch((3, 0, 1), blocks["redstone-torch"].slot, blocks["redstone-torch"].orientation("-x")), ]) for wire in wires: wire.connect(self.asic) for torch in torches: torch.connect(self.asic) self.assertEqual(inputs, set(self.asic.find_wires(0, 0, 0)[0]))
def test_update_wires_multiple_powered(self): torch = Torch((0, 0, 0), blocks["redstone-torch"].slot, blocks["redstone-torch"].orientation("-x")) wire = Wire((1, 0, 0), blocks["redstone-wire"].slot, 0x0) wire2 = Wire((1, 0, 1), blocks["redstone-wire"].slot, 0x0) plain = PlainBlock((2, 0, 0), blocks["sand"].slot, 0x0) torch.connect(self.asic) wire.connect(self.asic) wire2.connect(self.asic) plain.connect(self.asic) torch.status = True wires, outputs = self.asic.update_wires(1, 0, 0) self.assertTrue(wire in wires) self.assertTrue(wire2 in wires) self.assertTrue(plain in outputs) self.assertTrue(wire.status) self.assertEqual(wire.metadata, 15) self.assertTrue(wire2.status) self.assertEqual(wire2.metadata, 14)
def test_sand_torch_above(self): """ A torch on top of a sand block will turn off when the sand block turns on, and vice versa. """ asic = Asic() sand = PlainBlock((0, 0, 0), blocks["sand"].slot, 0x0) torch = Torch((0, 1, 0), blocks["redstone-torch"].slot, blocks["redstone-torch"].orientation("+y")) sand.connect(asic) torch.connect(asic) sand.status = True torch.update() self.assertFalse(torch.status) sand.status = False torch.update() self.assertTrue(torch.status)
def test_sand_torch(self): """ A torch attached to a sand block will turn off when the sand block turns on, and vice versa. """ asic = {} sand = PlainBlock((0, 0, 0), blocks["sand"].slot, 0x0) torch = Torch((1, 0, 0), blocks["redstone-torch"].slot, blocks["redstone-torch"].orientation("-x")) sand.connect(asic) torch.connect(asic) sand.status = True torch.update() self.assertFalse(torch.status) sand.status = False torch.update() self.assertTrue(torch.status)