object nameddefaults {
def foo(first: Int, second: Int = 2, third: Int = 3) = first + second
var x = 1
var y = 2
foo(1, 2, 3)
foo(1, 2)
foo(1)
// named and missing arguments
foo(first = 1, second = 3)
foo(second = 3, first = 1)
foo(first = 2, third = 3)
foo(2, third = 3)
// same but with non-idempotent expressions
foo(first = x, second = y)
foo(second = x, first = y)
foo(first = x, third = y)
foo(x, third = y)
// The same thing, but for classes
class C(first: Int, second: Int = 2, third: Int = 3) {}
new C(1, 2, 3)
new C(1, 2)
new C(1)
// named and missing arguments
new C(first = 1, second = 3)
new C(second = 3, first = 1)
new C(first = 2, third = 3)
new C(2, third = 3)
// same but with non-idempotent expressions
new C(first = x, second = y)
new C(second = x, first = y)
new C(first = x, third = y)
}