godot/modules/gdscript/tests/scripts/runtime/features/match_with_pattern_guards.gd

var global := 0

func test():
	var a = 0
	var b = 1

	match a:
		0 when b == 0:
			print("does not run" if true else "")
		0 when b == 1:
			print("guards work")
		_:
			print("does not run")

	match a:
		var a_bind when b == 0:
			prints("a is", a_bind, "and b is 0")
		var a_bind when b == 1:
			prints("a is", a_bind, "and b is 1")
		_:
			print("does not run")

	match a:
		var a_bind when a_bind < 0:
			print("a is less than zero")
		var a_bind when a_bind == 0:
			print("a is equal to zero")
		_:
			print("a is more than zero")

	match [1, 2, 3]:
		[1, 2, var element] when element == 0:
			print("does not run")
		[1, 2, var element] when element == 3:
			print("3rd element is 3")

	match a:
		_ when b == 0:
			print("does not run")
		_ when b == 1:
			print("works with wildcard too.")
		_:
			print("does not run")

	match a:
		0, 1 when b == 0:
			print("does not run")
		0, 1 when b == 1:
			print("guard with multiple patterns")
		_:
			print("does not run")

	match a:
		0 when b == 0:
			print("does not run")
		0:
			print("regular pattern after guard mismatch")

	match a:
		1 when side_effect():
			print("should not run the side effect call")
		0 when side_effect():
			print("will run the side effect call, but not this")
		_:
			Utils.check(global == 1)
			print("side effect only ran once")

func side_effect():
	print("side effect")
	global += 1
	return false