// match.vr — else-if chains and match statements.
//   vr run examples/match.vr

// classify returns a label using an else-if chain.
fn classify(n) {
	if n < 0 {
		return "negative"
	} else if n == 0 {
		return "zero"
	} else if n < 10 {
		return "small"
	} else {
		return "big"
	}
}

// describe names a number with a match statement.
fn describe(n) {
	match n {
		0 {
			println("nothing")
		}
		1 {
			println("lonely")
		}
		2 {
			println("a pair")
		}
		7 {
			println("lucky")
		}
		else {
			println("just " + n)
		}
	}
}

fn main() {
	// else-if chain
	println(classify(-5))
	println(classify(0))
	println(classify(7))
	println(classify(100))

	// match with else
	describe(0)
	describe(1)
	describe(2)
	describe(7)
	describe(42)

	// match on strings
	let day = "fri"
	match day {
		"sat" {
			println("weekend!")
		}
		"sun" {
			println("weekend!")
		}
		else {
			println("workday")
		}
	}

	// match inside a loop (break/continue still work)
	mut found = 0
	for i in 0..10 {
		match i {
			4 {
				found = i
				break
			}
			else {
				// keep looking
			}
		}
	}
	println("found " + found)
	assert found == 4
}
