Exemplo n.º 1
0
    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())
Exemplo n.º 2
0
    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())
Exemplo n.º 3
0
    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))
Exemplo n.º 4
0
    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())
Exemplo n.º 5
0
    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))
Exemplo n.º 6
0
    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())
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
    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)
Exemplo n.º 9
0
    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)
Exemplo n.º 10
0
    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)
Exemplo n.º 11
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]))
Exemplo n.º 12
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)
Exemplo n.º 13
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)
Exemplo n.º 14
0
    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)
Exemplo n.º 15
0
    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)