private void BP_WireBunch(TestContext context) {
      DPoint testOffset = new DPoint(71, 225);
      CircuitProcessingResult result;
      this.Config.MaxCircuitLength = 5000;

      context.Phase = "1";
      result = this.QuickProcessCircuit(testOffset.X + 5, testOffset.Y + 7);
      TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y);
      for (int y = 0; y < 6; y++) {
        int rowY = (y * 2) + 1;

        TAssert.IsObjectInactive(testOffset.X, testOffset.Y + rowY);
        TAssert.IsObjectInactive(testOffset.X + 1, testOffset.Y + rowY);
        TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + rowY);
        TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + rowY);
        TAssert.IsObjectInactive(testOffset.X + 5, testOffset.Y + rowY);
        TAssert.IsObjectInactive(testOffset.X + 7, testOffset.Y + rowY);
        TAssert.IsObjectInactive(testOffset.X + 8, testOffset.Y + rowY);
        TAssert.IsObjectInactive(testOffset.X + 9, testOffset.Y + rowY);

        rowY++;
        TAssert.IsObjectInactive(testOffset.X + 1, testOffset.Y + rowY);
        TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y + rowY);
        TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + rowY);
        if (y != 3)
          TAssert.IsObjectInactive(testOffset.X + 5, testOffset.Y + rowY);
        TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y + rowY);
        TAssert.IsObjectInactive(testOffset.X + 7, testOffset.Y + rowY);
        TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + rowY);
        TAssert.IsObjectInactive(testOffset.X + 9, testOffset.Y + rowY);
      }

      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 0);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 2);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 8);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 10);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 12);

      context.Phase = "2";
      result = this.QuickProcessCircuit(testOffset.X + 5, testOffset.Y + 7);
      TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y);
      for (int y = 0; y < 6; y++) {
        int rowY = (y * 2) + 1;

        TAssert.IsObjectActive(testOffset.X, testOffset.Y + rowY);
        TAssert.IsObjectActive(testOffset.X + 1, testOffset.Y + rowY);
        TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + rowY);
        TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + rowY);
        TAssert.IsObjectActive(testOffset.X + 5, testOffset.Y + rowY);
        TAssert.IsObjectActive(testOffset.X + 7, testOffset.Y + rowY);
        TAssert.IsObjectActive(testOffset.X + 8, testOffset.Y + rowY);
        TAssert.IsObjectActive(testOffset.X + 9, testOffset.Y + rowY);

        rowY++;
        TAssert.IsObjectActive(testOffset.X + 1, testOffset.Y + rowY);
        TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y + rowY);
        TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + rowY);
        if (y != 3)
          TAssert.IsObjectActive(testOffset.X + 5, testOffset.Y + rowY);
        TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + rowY);
        TAssert.IsObjectActive(testOffset.X + 7, testOffset.Y + rowY);
        TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + rowY);
        TAssert.IsObjectActive(testOffset.X + 9, testOffset.Y + rowY);
      }

      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 0);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 2);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 8);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 10);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 12);
    }
    private void AC_SingleTileTriggerPortInput(TestContext context) {
      DPoint testOffset = new DPoint(63, 372);

      // Middle Switch
      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 6);

      // Middle Switch
      this.QuickProcessCircuit(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + 6);

      // Top Switch
      context.Phase = "2";
      this.QuickProcessCircuit(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 6);

      // Left Switch
      context.Phase = "3";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + 6);

      // Right Switch
      context.Phase = "4";
      this.QuickProcessCircuit(testOffset.X + 6, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 6);

      // Bottom Switch
      context.Phase = "5";
      this.QuickProcessCircuit(testOffset.X + 3, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + 6);

      // Middle Switch
      context.Phase = "6";
      this.QuickProcessCircuit(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 6);
    }
    private void AC_MultiPortSending(TestContext context) {
      DPoint testOffset = new DPoint(85, 374);

      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X + 1, testOffset.Y + 1);
      TAssert.IsObjectInactive(testOffset.X + 1, testOffset.Y + 4);
      this.QuickProcessCircuit(testOffset.X + 1, testOffset.Y + 1);
      TAssert.IsObjectActive(testOffset.X + 1, testOffset.Y + 4);
    }
    private void AC_Statues(TestContext context) {
      DPoint testOffset = new DPoint(130, 345);

      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X + 14, testOffset.Y + 3);
      TAssert.AreNPCsInBlockRect(testOffset.X + 1, testOffset.Y + 1, 2, 3, TestRunner.NPCId_Guide, 1);
      TAssert.AreNPCsInBlockRect(testOffset.X + 4, testOffset.Y + 1, 2, 3, TestRunner.NPCId_Slime, 1);
      TAssert.AreItemsInBlockRect(testOffset.X + 7, testOffset.Y + 1, 2, 3, TestRunner.ItemId_IronPickaxe, 1);
    }
    private void AC_Timers(TestContext context) {
      DPoint testOffset = new DPoint(154, 344);

      TerrariaUtils.Tiles.SetObjectState(TerrariaUtils.Tiles.MeasureObject(new DPoint(testOffset.X + 2, testOffset.Y + 1)), false);
      TerrariaUtils.Tiles.SetObjectState(TerrariaUtils.Tiles.MeasureObject(new DPoint(testOffset.X + 4, testOffset.Y + 1)), false);
      TerrariaUtils.Tiles.SetObjectState(TerrariaUtils.Tiles.MeasureObject(new DPoint(testOffset.X + 6, testOffset.Y + 1)), false);
      TerrariaUtils.Tiles.SetObjectState(TerrariaUtils.Tiles.MeasureObject(new DPoint(testOffset.X + 10, testOffset.Y + 1)), false);
      TerrariaUtils.Tiles.SetObjectState(TerrariaUtils.Tiles.MeasureObject(new DPoint(testOffset.X + 12, testOffset.Y + 1)), false);

      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 1);
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 4);

      this.QuickProcessCircuit(testOffset.X + 2, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y + 1);

      this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 1);

      this.QuickProcessCircuit(testOffset.X + 6, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y + 1);

      // Other Timer
      this.QuickProcessCircuit(testOffset.X + 8, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 8, testOffset.Y + 1);

      // Switch
      this.QuickProcessCircuit(testOffset.X + 10, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 10, testOffset.Y + 1);

      // Lever
      this.QuickProcessCircuit(testOffset.X + 12, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 12, testOffset.Y + 1);

      context.DelayedActions.Add(new TestDelay(65, contextLocal => {
        context.Phase = "2";
        TAssert.IsObjectActive(testOffset.X, testOffset.Y + 1);
        TAssert.IsObjectActive(testOffset.X, testOffset.Y + 4);

        TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y + 1);

        TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 1);

        TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 1);

        // Other Timer
        TAssert.IsObjectActive(testOffset.X + 8, testOffset.Y + 1);
        TAssert.IsObjectActive(testOffset.X + 8, testOffset.Y + 4);

        // Switch
        TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 1);

        // Lever
        TAssert.IsObjectActive(testOffset.X + 12, testOffset.Y + 1);
      }));

      context.DelayedActions.Add(new TestDelay(65, contextLocal => {
        context.Phase = "3";
        TAssert.IsObjectActive(testOffset.X, testOffset.Y + 1);
        TAssert.IsObjectActive(testOffset.X, testOffset.Y + 4);

        TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y + 1);

        TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 1);

        TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 1);

        // Other Timer
        TAssert.IsObjectActive(testOffset.X + 8, testOffset.Y + 1);
        TAssert.IsObjectActive(testOffset.X + 8, testOffset.Y + 4);

        // Switch
        TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 1);

        // Lever
        TAssert.IsObjectActive(testOffset.X + 12, testOffset.Y + 1);
      }));
    }
    private void AC_BasicDoorToggling(TestContext context) {
      DPoint testOffset = new DPoint(75, 345);

      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X + 6, testOffset.Y + 3);
      TAssert.IsBlockType(testOffset.X, testOffset.Y + 3, BlockType.DoorClosed);
      TAssert.IsBlockType(testOffset.X + 2, testOffset.Y + 3, BlockType.DoorClosed);
      TAssert.IsBlockType(testOffset.X + 4, testOffset.Y + 3, BlockType.DoorClosed);
      TAssert.IsBlockType(testOffset.X + 8, testOffset.Y + 3, BlockType.DoorClosed);
      TAssert.IsBlockType(testOffset.X + 10, testOffset.Y + 3, BlockType.DoorClosed);
      TAssert.IsBlockType(testOffset.X + 12, testOffset.Y + 3, BlockType.DoorClosed);
      
      context.Phase = "2";
      this.QuickProcessCircuit(testOffset.X + 6, testOffset.Y + 3);
      TAssert.IsBlockType(testOffset.X, testOffset.Y + 3, BlockType.DoorOpened);
      TAssert.IsBlockType(testOffset.X + 2, testOffset.Y + 3, BlockType.DoorOpened);
      TAssert.IsBlockType(testOffset.X + 4, testOffset.Y + 3, BlockType.DoorOpened);
      TAssert.IsBlockType(testOffset.X + 8, testOffset.Y + 3, BlockType.DoorOpened);
      TAssert.IsBlockType(testOffset.X + 10, testOffset.Y + 3, BlockType.DoorOpened);
      TAssert.IsBlockType(testOffset.X + 12, testOffset.Y + 3, BlockType.DoorOpened);

      context.Phase = "3";
      this.QuickProcessCircuit(testOffset.X + 6, testOffset.Y + 3);
      TAssert.IsBlockType(testOffset.X, testOffset.Y + 3, BlockType.DoorClosed);
      TAssert.IsBlockType(testOffset.X + 2, testOffset.Y + 3, BlockType.DoorClosed);
      TAssert.IsBlockType(testOffset.X + 4, testOffset.Y + 3, BlockType.DoorClosed);
      TAssert.IsBlockType(testOffset.X + 8, testOffset.Y + 3, BlockType.DoorClosed);
      TAssert.IsBlockType(testOffset.X + 10, testOffset.Y + 3, BlockType.DoorClosed);
      TAssert.IsBlockType(testOffset.X + 12, testOffset.Y + 3, BlockType.DoorClosed);
    }
    private void AC_BlockedDoorToggling2(TestContext context) {
      DPoint testOffset = new DPoint(104, 345);
      CircuitProcessingResult result;

      context.Phase = "1";
      result = this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y + 3);
      this.Assert_SignaledComponents(result, 0);
      this.Assert_SignaledPortDefiningComponents(result, 2);
      TAssert.IsBlockType(testOffset.X + 1, testOffset.Y + 3, BlockType.DoorClosed);
      TAssert.IsBlockType(testOffset.X + 7, testOffset.Y + 3, BlockType.DoorClosed);

      context.Phase = "2";
      result = this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y + 3);
      this.Assert_SignaledComponents(result, 0);
      this.Assert_SignaledPortDefiningComponents(result, 2);
      TAssert.IsBlockType(testOffset.X, testOffset.Y + 3, BlockType.DoorOpened);
      TAssert.IsBlockType(testOffset.X + 8, testOffset.Y + 3, BlockType.DoorOpened);

      context.Phase = "3";
      result = this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y + 3);
      this.Assert_SignaledComponents(result, 0);
      this.Assert_SignaledPortDefiningComponents(result, 2);
      TAssert.IsBlockType(testOffset.X + 1, testOffset.Y + 3, BlockType.DoorClosed);
      TAssert.IsBlockType(testOffset.X + 7, testOffset.Y + 3, BlockType.DoorClosed);
    }
    private void AC_BlockActivator(TestContext context) {
      DPoint testOffset = new DPoint(395, 364);

      BlockType[,] phaseOneExpectedBlockTypes = new[,] {
        { BlockType.CobaltBrick, BlockType.Glass, BlockType.Wood, BlockType.MythrilBrick },
        { BlockType.BlueBrick, BlockType.MudBlock, BlockType.GreenBrick, BlockType.Clay },
        { BlockType.SilverBrick, BlockType.CopperBrick, BlockType.RedBrick, BlockType.StoneBlock },
        { BlockType.GrayBrick, BlockType.PinkBrick, BlockType.DirtBlock, BlockType.Meteorite }
      };

      this.Config.BlockActivatorConfig.Cooldown = 0;
      this.MetadataHandler.Metadata.BlockActivators.Clear();

      context.Phase = "1-1";
      DPoint activationFieldOffset = new DPoint(testOffset.X + 1, testOffset.Y + 1);
      for (int x = 0; x < 4; x++) {
        for (int y = 0; y < 4; y++) {
          TAssert.IsBlockType(activationFieldOffset.X + x, activationFieldOffset.Y + y, phaseOneExpectedBlockTypes[y, x]);
        }
      }

      context.Phase = "1-2";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 10);
      for (int x = 0; x < 4; x++) {
        for (int y = 0; y < 4; y++) {
          if (x == 3 && y == 3) {
            TAssert.IsBlockType(activationFieldOffset.X + x, activationFieldOffset.Y + y, BlockType.Meteorite);
            continue;
          }

          TAssert.IsTileInactive(activationFieldOffset.X + x, activationFieldOffset.Y + y);
        }
      }

      context.Phase = "1-3";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 10);
      for (int x = 0; x < 4; x++) {
        for (int y = 0; y < 4; y++) {
          TAssert.IsBlockType(activationFieldOffset.X + x, activationFieldOffset.Y + y, phaseOneExpectedBlockTypes[y, x]);
        }
      }

      context.Phase = "2-1";
      activationFieldOffset = new DPoint(testOffset.X + 8, testOffset.Y + 1);
      for (int x = 0; x < 4; x++) {
        for (int y = 0; y < 4; y++) {
          TAssert.IsBlockType(activationFieldOffset.X + x, activationFieldOffset.Y + y, BlockType.GrayBrick);
        }
      }

      context.Phase = "2-2";
      this.QuickProcessCircuit(testOffset.X + 7, testOffset.Y + 10);
      for (int x = 0; x < 4; x++) {
        for (int y = 0; y < 4; y++) {
          if (x < 2) {
            TAssert.IsTileInactive(activationFieldOffset.X + x, activationFieldOffset.Y + y);
          } else {
            TAssert.IsBlockType(activationFieldOffset.X + x, activationFieldOffset.Y + y, BlockType.GrayBrick);
          }
        }
      }

      context.Phase = "2-3";
      this.QuickProcessCircuit(testOffset.X + 9, testOffset.Y + 10);
      for (int x = 0; x < 4; x++) {
        for (int y = 0; y < 4; y++) {
          TAssert.IsTileInactive(activationFieldOffset.X + x, activationFieldOffset.Y + y);
        }
      }

      context.Phase = "2-4";
      this.QuickProcessCircuit(testOffset.X + 7, testOffset.Y + 10);
      for (int x = 0; x < 4; x++) {
        for (int y = 0; y < 4; y++) {
          if (x < 2) {
            TAssert.IsBlockType(activationFieldOffset.X + x, activationFieldOffset.Y + y, BlockType.GrayBrick);
          } else {
            TAssert.IsTileInactive(activationFieldOffset.X + x, activationFieldOffset.Y + y);
          }
        }
      }

      context.Phase = "2-5";
      this.QuickProcessCircuit(testOffset.X + 9, testOffset.Y + 10);
      for (int x = 0; x < 4; x++) {
        for (int y = 0; y < 4; y++) {
          TAssert.IsBlockType(activationFieldOffset.X + x, activationFieldOffset.Y + y, BlockType.GrayBrick);
        }
      }

      context.Phase = "2-6";
      this.QuickProcessCircuit(testOffset.X + 11, testOffset.Y + 10);
      for (int x = 0; x < 4; x++) {
        for (int y = 0; y < 4; y++) {
          if (x < 2) {
            TAssert.IsBlockType(activationFieldOffset.X + x, activationFieldOffset.Y + y, BlockType.GrayBrick);
          } else {
            TAssert.IsTileInactive(activationFieldOffset.X + x, activationFieldOffset.Y + y);
          }
        }
      }
    }
    private void AC_Boulder(TestContext context) {
      DPoint testOffset = new DPoint(413, 373);

      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X + 5, testOffset.Y + 1);
      TAssert.IsTileActive(testOffset.X + 2, testOffset.Y);

      context.Phase = "2";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 1);
      TAssert.IsTileActive(testOffset.X + 2, testOffset.Y);

      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 1);
      TAssert.IsTileInactive(testOffset.X + 2, testOffset.Y);
    }
    private void AC_SwitchForwarding(TestContext context) {
      DPoint testOffset = new DPoint(356, 372);

      context.Phase = "1";
      // First Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y);

      // Second Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y + 3);

      context.Phase = "2";
      // First Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y);

      // Second Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 3);

      context.Phase = "3";
      // First Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y);

      // Second Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y + 3);

      context.Phase = "4";
      TerrariaUtils.Tiles.SetObjectState(TerrariaUtils.Tiles.MeasureObject(new DPoint(testOffset.X + 3, testOffset.Y)), true);
      TerrariaUtils.Tiles.SetObjectState(TerrariaUtils.Tiles.MeasureObject(new DPoint(testOffset.X + 3, testOffset.Y + 3)), true);

      // First Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y);

      // Second Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 3);

      context.Phase = "5";
      // First Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y);

      // Second Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y + 3);
    }
    private void AC_GrandfatherClock(TestContext context) {
      DPoint testOffset = new DPoint(366, 366);

      this.MetadataHandler.Metadata.Clocks.Add(new DPoint(369, 370), new GrandfatherClockMetadata(null));
      this.MetadataHandler.Metadata.Clocks.Add(new DPoint(378, 370), new GrandfatherClockMetadata(null));
      this.MetadataHandler.Metadata.Clocks.Add(new DPoint(387, 370), new GrandfatherClockMetadata(null));

      context.Phase = "1";
      TSPlayer.Server.SetTime(false, 0);
      TSPlayer.Server.SetBloodMoon(false);

      context.DelayedActions.Add(new TestDelay(61, (contextLocal) => {
        context.Phase = "2";

        TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y);
        TAssert.IsObjectActive(testOffset.X, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 7, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 12);

        TAssert.IsObjectActive(testOffset.X + 12, testOffset.Y);
        TAssert.IsObjectActive(testOffset.X + 9, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 16, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 13, testOffset.Y + 12);

        TAssert.IsObjectInactive(testOffset.X + 21, testOffset.Y);
        TAssert.IsObjectInactive(testOffset.X + 18, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 25, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 22, testOffset.Y + 12);
        
        TSPlayer.Server.SetTime(true, 1000);
      }));
      
      context.DelayedActions.Add(new TestDelay(61, (contextLocal) => {
        context.Phase = "3";
        TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y);
        TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 7, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 12);

        TAssert.IsObjectActive(testOffset.X + 12, testOffset.Y);
        TAssert.IsObjectActive(testOffset.X + 9, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 16, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 13, testOffset.Y + 12);

        TAssert.IsObjectInactive(testOffset.X + 21, testOffset.Y);
        TAssert.IsObjectInactive(testOffset.X + 18, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 25, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 22, testOffset.Y + 12);

        TSPlayer.Server.SetTime(true, 7200);
      }));
      
      context.DelayedActions.Add(new TestDelay(61, (contextLocal) => {
        context.Phase = "4";
        TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y);
        TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 7, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 12);

        TAssert.IsObjectInactive(testOffset.X + 12, testOffset.Y);
        TAssert.IsObjectInactive(testOffset.X + 9, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 16, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 13, testOffset.Y + 12);

        TAssert.IsObjectInactive(testOffset.X + 21, testOffset.Y);
        TAssert.IsObjectInactive(testOffset.X + 18, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 25, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 22, testOffset.Y + 12);

        TSPlayer.Server.SetTime(true, 46800);
      }));

      context.DelayedActions.Add(new TestDelay(61, (contextLocal) => {
        context.Phase = "5";
        TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y);
        TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 7, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 12);

        TAssert.IsObjectActive(testOffset.X + 12, testOffset.Y);
        TAssert.IsObjectActive(testOffset.X + 9, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 16, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 13, testOffset.Y + 12);

        TAssert.IsObjectInactive(testOffset.X + 21, testOffset.Y);
        TAssert.IsObjectInactive(testOffset.X + 18, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 25, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 22, testOffset.Y + 12);

        TSPlayer.Server.SetTime(false, 0);
      }));

      context.DelayedActions.Add(new TestDelay(61, (contextLocal) => {
        context.Phase = "6";
        TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y);
        TAssert.IsObjectActive(testOffset.X, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 7, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 12);

        TAssert.IsObjectActive(testOffset.X + 12, testOffset.Y);
        TAssert.IsObjectActive(testOffset.X + 9, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 16, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 13, testOffset.Y + 12);

        TAssert.IsObjectInactive(testOffset.X + 21, testOffset.Y);
        TAssert.IsObjectInactive(testOffset.X + 18, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 25, testOffset.Y + 5);
        TAssert.IsObjectInactive(testOffset.X + 22, testOffset.Y + 12);

        // Bloodmoon seems to work fine but the test fails anyway... probably because it takes too long for the bloodmoon setting
        // to be effective.
        //TSPlayer.Server.SetBloodMoon(true);

        TSPlayer.Server.SetTime(true, 9000);
      }));

      /*context.DelayedActions.Add(new TestDelay(180, (contextLocal) => {
        context.Phase = "7";
        TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y);
        TAssert.IsObjectActive(testOffset.X, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 7, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 12);

        TAssert.IsObjectActive(testOffset.X + 12, testOffset.Y);
        TAssert.IsObjectActive(testOffset.X + 9, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 16, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 13, testOffset.Y + 12);

        TAssert.IsObjectActive(testOffset.X + 21, testOffset.Y);
        TAssert.IsObjectActive(testOffset.X + 18, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 25, testOffset.Y + 5);
        TAssert.IsObjectActive(testOffset.X + 22, testOffset.Y + 12);

        TSPlayer.Server.SetTime(true, 9000);
      }));*/
    }
    private void AC_TimerModifiers(TestContext context) {
      DPoint testOffset = new DPoint(341, 372);

      ObjectMeasureData firstTorch = TerrariaUtils.Tiles.MeasureObject(new DPoint(testOffset.X + 1, testOffset.Y));
      ObjectMeasureData secondTorch = TerrariaUtils.Tiles.MeasureObject(new DPoint(testOffset.X + 4, testOffset.Y));
      ObjectMeasureData thirdTorch = TerrariaUtils.Tiles.MeasureObject(new DPoint(testOffset.X + 7, testOffset.Y));
      ObjectMeasureData fourthTorch = TerrariaUtils.Tiles.MeasureObject(new DPoint(testOffset.X + 10, testOffset.Y));
      TerrariaUtils.Tiles.SetObjectState(firstTorch, false);
      TerrariaUtils.Tiles.SetObjectState(secondTorch, false);
      TerrariaUtils.Tiles.SetObjectState(thirdTorch, false);
      TerrariaUtils.Tiles.SetObjectState(fourthTorch, false);

      context.Phase = "1";
      // First Switch
      this.QuickProcessCircuit(testOffset.X + 1, testOffset.Y + 3);
      this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y + 3);
      this.QuickProcessCircuit(testOffset.X + 7, testOffset.Y + 3);
      this.QuickProcessCircuit(testOffset.X + 10, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 1, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 7, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 10, testOffset.Y + 3);

      context.DelayedActions.Add(new TestDelay(15, (contextLocal) => {
        context.Phase = "2";

        TAssert.IsObjectInactive(testOffset.X + 1, testOffset.Y + 3);
        TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 3);
        TAssert.IsObjectInactive(testOffset.X + 7, testOffset.Y + 3);
        TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 3);

        TerrariaUtils.Tiles.SetObjectState(fourthTorch, false);
      }));

      context.DelayedActions.Add(new TestDelay(15, (contextLocal) => {
        context.Phase = "3";

        TAssert.IsObjectInactive(testOffset.X + 1, testOffset.Y + 3);
        TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 3);
        TAssert.IsObjectActive(testOffset.X + 7, testOffset.Y + 3);
        TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 3);

        TerrariaUtils.Tiles.SetObjectState(thirdTorch, false);
        TerrariaUtils.Tiles.SetObjectState(fourthTorch, false);
      }));

      context.DelayedActions.Add(new TestDelay(15, (contextLocal) => {
        context.Phase = "4";

        TAssert.IsObjectInactive(testOffset.X + 1, testOffset.Y + 3);
        TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 3);
        TAssert.IsObjectInactive(testOffset.X + 7, testOffset.Y + 3);
        TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 3);

        TerrariaUtils.Tiles.SetObjectState(fourthTorch, false);
      }));

      context.DelayedActions.Add(new TestDelay(15, (contextLocal) => {
        context.Phase = "5";

        TAssert.IsObjectInactive(testOffset.X + 1, testOffset.Y + 3);
        TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 3);
        TAssert.IsObjectActive(testOffset.X + 7, testOffset.Y + 3);
        TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 3);

        TerrariaUtils.Tiles.SetObjectState(thirdTorch, false);
        TerrariaUtils.Tiles.SetObjectState(fourthTorch, false);
      }));

      context.DelayedActions.Add(new TestDelay(60, (contextLocal) => {
        context.Phase = "6";

        TAssert.IsObjectActive(testOffset.X + 1, testOffset.Y + 3);
        TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 3);
        TAssert.IsObjectActive(testOffset.X + 7, testOffset.Y + 3);
        TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 3);

        TerrariaUtils.Tiles.SetObjectState(firstTorch, false);
        TerrariaUtils.Tiles.SetObjectState(thirdTorch, false);
        TerrariaUtils.Tiles.SetObjectState(fourthTorch, false);
      }));

      context.DelayedActions.Add(new TestDelay(60, (contextLocal) => {
        context.Phase = "7";

        TAssert.IsObjectInactive(testOffset.X + 1, testOffset.Y + 3);
        TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 3);
        TAssert.IsObjectActive(testOffset.X + 7, testOffset.Y + 3);
        TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 3);

        TerrariaUtils.Tiles.SetObjectState(thirdTorch, false);
        TerrariaUtils.Tiles.SetObjectState(fourthTorch, false);
      }));

      context.DelayedActions.Add(new TestDelay(60, (contextLocal) => {
        context.Phase = "8";

        TAssert.IsObjectActive(testOffset.X + 1, testOffset.Y + 3);
        TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 3);
        TAssert.IsObjectActive(testOffset.X + 7, testOffset.Y + 3);
        TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 3);
      }));
    }
    private void AC_NOTPorts3(TestContext context) {
      DPoint testOffset = new DPoint(331, 369);

      context.Phase = "1";
      // First Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y);

      // Second Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 3);

      // Third Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 6);

      context.Phase = "2";
      // First Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y);

      // Second Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 3);

      // Third Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 6);

      context.Phase = "3";
      // First Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y);

      // Second Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 3);

      // Third Switch
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 6);
    }
    private void AC_NOTPorts1(TestContext context) {
      DPoint testOffset = new DPoint(314, 369);

      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y);

      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + 3);

      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 6);

      context.Phase = "2";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y);

      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 3);

      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + 6);

      context.Phase = "3";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y);

      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + 3);

      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 6);
    }
    private void Vanilla_Timers(TestContext context) {
      DPoint testOffset = new DPoint(154, 281);

      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 1);
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 4);

      this.QuickProcessCircuit(testOffset.X + 2, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y + 1);

      this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 1);

      this.QuickProcessCircuit(testOffset.X + 6, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 1);

      // Other Timer
      this.QuickProcessCircuit(testOffset.X + 8, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 8, testOffset.Y + 1);

      // Note that switches and levers should not be signalable in vanilla circuits.
      // Switch
      this.QuickProcessCircuit(testOffset.X + 10, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 1);

      // Lever
      this.QuickProcessCircuit(testOffset.X + 12, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 12, testOffset.Y + 1);

      context.DelayedActions.Add(new TestDelay(65, contextLocal => {
        context.Phase = "2";
        TAssert.IsObjectActive(testOffset.X, testOffset.Y + 1);
        TAssert.IsObjectActive(testOffset.X, testOffset.Y + 4);

        TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y + 1);

        TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 1);

        TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y + 1);

        // Other Timer
        TAssert.IsObjectActive(testOffset.X + 8, testOffset.Y + 1);
        TAssert.IsObjectActive(testOffset.X + 8, testOffset.Y + 4);

        // Switch
        TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 1);

        // Lever
        TAssert.IsObjectActive(testOffset.X + 12, testOffset.Y + 1);
      }));

      context.DelayedActions.Add(new TestDelay(65, contextLocal => {
        context.Phase = "3";
        TAssert.IsObjectActive(testOffset.X, testOffset.Y + 1);
        TAssert.IsObjectActive(testOffset.X, testOffset.Y + 4);

        TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y + 1);

        TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 1);

        TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 1);

        // Other Timer
        TAssert.IsObjectInactive(testOffset.X + 8, testOffset.Y + 1);
        TAssert.IsObjectInactive(testOffset.X + 8, testOffset.Y + 4);

        // Switch
        TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 1);

        // Lever
        TAssert.IsObjectActive(testOffset.X + 12, testOffset.Y + 1);
      }));
    }
    private void AC_WirelessTransmitter(TestContext context) {
      DPoint testOffset = new DPoint(422, 371);

      context.Phase = "1-1";
      this.Config.WirelessTransmitterConfigs[ComponentConfigProfile.Default].Range = 3;
      this.Config.WirelessTransmitterConfigs[ComponentConfigProfile.Default].Cooldown = 0;
      this.MetadataHandler.Metadata.WirelessTransmitters.Clear();
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset, this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(2, 0), this.GetTestPlayer().Name);

      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y + 3);

      context.Phase = "1-2";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y + 3);

      context.Phase = "1-3";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y + 3);

      context.Phase = "2-1";
      testOffset.Offset(5, 0);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset, this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(2, 0), this.GetTestPlayer().Name);

      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y + 3);

      context.Phase = "2-2";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y + 3);

      context.Phase = "2-3";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y + 3);

      context.Phase = "3-1";
      this.Config.WirelessTransmitterConfigs[ComponentConfigProfile.Default].Range = 6;
      testOffset.Offset(5, 0);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset, this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(2, 0), this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(4, 0), this.GetTestPlayer().Name);

      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 3);

      context.Phase = "3-2";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 3);

      context.Phase = "3-3";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 3);
    }
    private void AC_AllSpritesToggleState(TestContext context) {
      DPoint testOffset = new DPoint(46, 343);

      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X + 1, testOffset.Y + 5);
      this.CheckAllSpritesState(testOffset, false);

      context.Phase = "2";
      this.QuickProcessCircuit(testOffset.X + 1, testOffset.Y + 5);
      this.CheckAllSpritesState(testOffset, true);

      context.Phase = "3";
      this.QuickProcessCircuit(testOffset.X + 1, testOffset.Y + 5);
      this.CheckAllSpritesState(testOffset, false);
    }
    private void AC_WirelessTransmitter2(TestContext context) {
      DPoint testOffset = new DPoint(440, 362);

      this.Config.WirelessTransmitterConfigs[ComponentConfigProfile.Default].Range = 5;
      this.Config.WirelessTransmitterConfigs[ComponentConfigProfile.Default].Cooldown = 0;

      this.MetadataHandler.Metadata.WirelessTransmitters.Clear();
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(10, 0), this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(7, 1), this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(0, 5), this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(2, 5), this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(4, 5), this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(6, 5), this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(9, 5), this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(11, 5), this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(13, 5), this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(9, 9), this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(3, 10), this.GetTestPlayer().Name);
      this.MetadataHandler.Metadata.WirelessTransmitters.Add(testOffset.OffsetEx(1, 11), this.GetTestPlayer().Name);

      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X + 6, testOffset.Y + 12);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 1);
      TAssert.IsObjectInactive(testOffset.X + 7, testOffset.Y + 2);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X + 9, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X + 11, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 13, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X + 9, testOffset.Y + 10);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 11);
      TAssert.IsObjectActive(testOffset.X + 1, testOffset.Y + 12);

      context.Phase = "2";
      this.QuickProcessCircuit(testOffset.X + 6, testOffset.Y + 12);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 1);
      TAssert.IsObjectActive(testOffset.X + 7, testOffset.Y + 2);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 9, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 11, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 13, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 9, testOffset.Y + 10);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + 11);
      TAssert.IsObjectActive(testOffset.X + 1, testOffset.Y + 12);

      context.Phase = "3";
      this.QuickProcessCircuit(testOffset.X + 6, testOffset.Y + 12);
      TAssert.IsObjectActive(testOffset.X + 10, testOffset.Y + 1);
      TAssert.IsObjectInactive(testOffset.X + 7, testOffset.Y + 2);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X + 9, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X + 11, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 13, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X + 9, testOffset.Y + 10);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 11);
      TAssert.IsObjectActive(testOffset.X + 1, testOffset.Y + 12);
    }
    private void AC_BlockedDoorToggling1(TestContext context) {
      DPoint testOffset = new DPoint(92, 345);
      CircuitProcessingResult result;

      TerrariaUtils.Tiles.SetObjectState(TerrariaUtils.Tiles.MeasureObject(new DPoint(testOffset.X + 4, testOffset.Y + 3)), false);

      context.Phase = "1";
      result = this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y + 3);
      this.Assert_SignaledComponents(result, 0);
      this.Assert_SignaledPortDefiningComponents(result, 2);
      TAssert.IsBlockType(testOffset.X + 2, testOffset.Y + 3, BlockType.DoorOpened);
      TAssert.IsBlockType(testOffset.X + 6, testOffset.Y + 3, BlockType.DoorOpened);

      context.Phase = "2";
      result = this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y + 3);
      this.Assert_SignaledComponents(result, 0);
      this.Assert_SignaledPortDefiningComponents(result, 2);
      TAssert.IsBlockType(testOffset.X + 1, testOffset.Y + 3, BlockType.DoorClosed);
      TAssert.IsBlockType(testOffset.X + 7, testOffset.Y + 3, BlockType.DoorClosed);
    }
    private void BP_MultiBranches2(TestContext context) {
      DPoint testOffset = new DPoint(85, 229);
      CircuitProcessingResult result;

      context.Phase = "1";
      result = this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 7, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 5, testOffset.Y + 2);
      TAssert.IsObjectInactive(testOffset.X + 9, testOffset.Y + 2);
      TAssert.IsObjectInactive(testOffset.X + 14, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 5, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 9, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 7, testOffset.Y + 6);

      context.Phase = "2";
      result = this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 7, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X + 5, testOffset.Y + 2);
      TAssert.IsObjectActive(testOffset.X + 9, testOffset.Y + 2);
      TAssert.IsObjectActive(testOffset.X + 14, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 5, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 9, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 7, testOffset.Y + 6);

      context.Phase = "3";
      result = this.QuickProcessCircuit(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 7, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 5, testOffset.Y + 2);
      TAssert.IsObjectInactive(testOffset.X + 9, testOffset.Y + 2);
      TAssert.IsObjectInactive(testOffset.X + 14, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 5, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 9, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 7, testOffset.Y + 6);
    }
    private void AC_Pumps(TestContext context) {
      DPoint testOffset = new DPoint(116, 346);

      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X + 5, testOffset.Y + 2);
      context.DelayedActions.Add(new TestDelay(30, (contextLocal => {
        TAssert.HasNoLiquid(testOffset.X + 1, testOffset.Y + 1);
        TAssert.HasNoLiquid(testOffset.X + 2, testOffset.Y + 1);
        TAssert.HasNoLiquid(testOffset.X + 1, testOffset.Y + 2);
        TAssert.HasNoLiquid(testOffset.X + 2, testOffset.Y + 2);
        TAssert.HasFullLiquid(testOffset.X + 8, testOffset.Y + 1);
        TAssert.HasFullLiquid(testOffset.X + 9, testOffset.Y + 1);
        TAssert.HasFullLiquid(testOffset.X + 8, testOffset.Y + 2);
        TAssert.HasFullLiquid(testOffset.X + 9, testOffset.Y + 2);
      })));
    }
    private void BP_DoubleSignal2(TestContext context) {
      DPoint testOffset = new DPoint(110, 230);
      CircuitProcessingResult result;

      context.Phase = "1";
      result = this.QuickProcessCircuit(testOffset.X, testOffset.Y + 2);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y + 2);
      this.Assert_SignaledComponents(result, 2);
      this.Assert_ProcessedBranches(result, 10);

      context.Phase = "2";
      result = this.QuickProcessCircuit(testOffset.X, testOffset.Y + 2);
      TAssert.IsObjectActive(testOffset.X + 6, testOffset.Y + 2);
      this.Assert_SignaledComponents(result, 2);
      this.Assert_ProcessedBranches(result, 10);

      context.Phase = "3";
      result = this.QuickProcessCircuit(testOffset.X, testOffset.Y + 2);
      TAssert.IsObjectInactive(testOffset.X + 6, testOffset.Y + 2);
      this.Assert_SignaledComponents(result, 2);
      this.Assert_ProcessedBranches(result, 10);
    }
    private void AC_ComponentActivation(TestContext context) {
      DPoint testOffset = new DPoint(148, 342);

      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 3);
      this.QuickProcessCircuit(testOffset.X + 2, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y + 3);

      context.Phase = "2";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 3);
      this.QuickProcessCircuit(testOffset.X + 2, testOffset.Y + 6);
      TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y + 3);

      context.Phase = "3";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 3);
      this.QuickProcessCircuit(testOffset.X + 2, testOffset.Y + 6);
      TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y + 3);
    }
    private void BP_Loop(TestContext context) {
      DPoint testOffset = new DPoint(120, 230);
      CircuitProcessingResult result;

      context.Phase = "1";
      result = this.QuickProcessCircuit(testOffset.X, testOffset.Y + 2);
      this.Assert_Cancelled(result, CircuitCancellationReason.SignaledSameComponentTooOften, BlockType.Obsidian);
    }
    private void AC_SingleTileTriggerPorts(TestContext context) {
      DPoint testOffset = new DPoint(43, 372);

      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectInactive(testOffset.X + 3, testOffset.Y + 6);

      context.Phase = "2";
      this.QuickProcessCircuit(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + 3);
      TAssert.IsObjectActive(testOffset.X + 3, testOffset.Y + 6);
    }
    private void BP_ProcessingTime(TestContext context) {
      DPoint testOffset = new DPoint(129, 180);
      CircuitProcessingResult result;

      this.Config.MaxCircuitLength = 2000;

      context.Phase = "1";
      TimeSpan allProcessingTime = TimeSpan.Zero;
      for (int i = 0; i < 50; i++) {
        result = this.QuickProcessCircuit(testOffset.X + 21, testOffset.Y + 2);
        this.Assert_Cancelled(result, CircuitCancellationReason.None);
        allProcessingTime += result.ProcessingTime;
      }

      TimeSpan averageProcessingTime = TimeSpan.FromMilliseconds(allProcessingTime.TotalMilliseconds / 50);
      if (averageProcessingTime.TotalMilliseconds > 30)
        throw new AssertException("The average processing time was over 30 milliseconds.");
    }
    private void AC_SelfSwitching(TestContext context) {
      DPoint testOffset = new DPoint(73, 375);

      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X + 2, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y);
      this.QuickProcessCircuit(testOffset.X + 2, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X + 2, testOffset.Y);
      this.QuickProcessCircuit(testOffset.X + 2, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 2, testOffset.Y);
    }
    private void Vanilla_BlockedDoorToggling1(TestContext context) {
      DPoint testOffset = new DPoint(92, 282);
      CircuitProcessingResult result;

      context.Phase = "1";
      result = this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y + 3);
      this.Assert_SignaledComponents(result, 2);
      TAssert.IsBlockType(testOffset.X + 2, testOffset.Y + 3, BlockType.DoorOpened);
      TAssert.IsBlockType(testOffset.X + 6, testOffset.Y + 3, BlockType.DoorOpened);

      context.Phase = "2";
      result = this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y + 3);
      this.Assert_SignaledComponents(result, 2);
      TAssert.IsBlockType(testOffset.X + 1, testOffset.Y + 3, BlockType.DoorClosed);
      TAssert.IsBlockType(testOffset.X + 7, testOffset.Y + 3, BlockType.DoorClosed);
    }
    private void AC_GreenPressurePlate(TestContext context) {
      DPoint testOffset = new DPoint(91, 375);

      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 3);
      this.QuickProcessCircuit(testOffset.X, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 3);
    }
    private void AC_MultiTileTriggerPorts3(TestContext context) {
      DPoint testOffset = new DPoint(301, 370);

      // Middle Switch
      context.Phase = "1";
      this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 8, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 8);
      this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 8, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 8);

      // Top Switch
      context.Phase = "2";
      this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 8, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 8);

      // Left Switch
      context.Phase = "3";
      this.QuickProcessCircuit(testOffset.X, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 8, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 8);

      // Right Switch
      context.Phase = "4";
      this.QuickProcessCircuit(testOffset.X + 8, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 8, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 8);

      // Bottom Switch
      context.Phase = "5";
      this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y + 8);
      TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y);
      TAssert.IsObjectActive(testOffset.X, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 8, testOffset.Y + 4);
      TAssert.IsObjectActive(testOffset.X + 4, testOffset.Y + 8);

      // Middle Switch
      context.Phase = "6";
      this.QuickProcessCircuit(testOffset.X + 4, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y);
      TAssert.IsObjectInactive(testOffset.X, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 8, testOffset.Y + 4);
      TAssert.IsObjectInactive(testOffset.X + 4, testOffset.Y + 8);
    }