//===--- Hanoi.swift ------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//

// This test checks performance of Swift hanoi tower.
// <rdar://problem/22151932>
import Foundation
import TestsUtils

public let Hanoi = BenchmarkInfo(
  name: "Hanoi",
  runFunction: run_Hanoi,
  tags: [.validation, .algorithm])

struct Move {
   var from: String
   var to: String
   init(from:String, to:String) {
      self.from = from
      self.to = to
   }
}

class TowersOfHanoi {
  // Record all moves made.
  var moves : [Move] = [Move]()

  func solve(_ n: Int, start: String, auxiliary: String, end: String) {
    if (n == 1) {
      moves.append(Move(from:start, to:end))
    } else {
      solve(n - 1, start: start, auxiliary: end, end: auxiliary)
      moves.append(Move(from:start, to:end))
      solve(n - 1, start: auxiliary, auxiliary: start, end: end)
    }
  }
}

@inline(never)
public func run_Hanoi(_ N: Int) {
  for _ in 1...100*N {
    let hanoi: TowersOfHanoi = TowersOfHanoi()
    hanoi.solve(10, start: "A", auxiliary: "B", end: "C")
  }
}
