// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package enumswitch

enum class KDirection {
  North,
  South,
  East,
  West,
}

fun direction1(direction: KDirection) =
  when (direction) {
    KDirection.North -> "N"
    KDirection.South -> "S"
    KDirection.East -> "E"
    KDirection.West -> "W"
  }

// Different declaration order than direction1 or direction2
fun direction2(direction: KDirection) =
  when (direction) {
    KDirection.East -> "E"
    KDirection.North -> "N"
    KDirection.West -> "W"
    KDirection.South -> "S"
  }

fun main(args: Array<String>) {
  println(direction1(KDirection.North))
  println(direction1(KDirection.South))
  println(direction1(KDirection.East))
  println(direction1(KDirection.West))
  println(direction2(KDirection.North))
  println(direction2(KDirection.South))
  println(direction2(KDirection.East))
  println(direction2(KDirection.West))
}
