private void TestAllInstructionCycles(Instruction instruction) {
    TestFetchInstruction();

    // Give the state machine the new instruction that should be loaded from
    // FetchInstruction.
    state_machine_.Notify(instruction.bitword(), OutputId.Ir,
                          InputId.DontCare, null);

    // Optional cycles.
    // TODO RESERVED should go directly to interrupt at this point.
    switch (instruction.op_code()) {
      case LD:    // Fallthrough intended.
      case LDR:
        TestEvaluateAddress(instruction);
        TestFetchOperands(instruction);
        break;
      case ST:    // Fallthrough intended.
      case STR:   // Fallthrough intended.
      case TRAP:
        TestEvaluateAddress(instruction);
        TestExecuteOperation(instruction);
        break;
      case LDI:   // Fallthrough intended.
      case STI:
        TestEvaluateAddress(instruction);
        TestFetchOperands(instruction);
        TestExecuteOperation(instruction);
        break;
      case RTI:   // Fallthrough intended.
      case RESERVED:
        assert false;
      default:
        break;
    }
    TestStoreResult(instruction);
    prior_instruction_ = instruction;
  }