// Copyright (c) 2018, 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 dataclass

/**
 * This is an example of copying an instance of a data class Person using its copy method and
 * passing a value for each property.
 *
 * See https://kotlinlang.org/docs/reference/data-classes.html#copying.
 */
fun main(args: Array<String>) {
  testDataClassCopy()
}

fun testDataClassCopy() {
  val albert = Person("Albert", 28)
  val youngerJonas = albert.copy("Jonas", albert.age - 10)
  val olderJonas = youngerJonas.copy("Jonas", albert.age + 20)
  println("Name: ${olderJonas.name}")
  println("Age: ${olderJonas.age}")
}
