public static decimal CalculateToll(object vehicle) =>
	vehicle switch
	{
		DeliveryTruck t when t.GrossWeightClass > 5000 => 10.00m + 5.00m,
		DeliveryTruck t when t.GrossWeightClass < 3000 => 10.00m - 2.00m,
		DeliveryTruck _ => 10.00m,
		_ => throw new ArgumentException("Not a known vehicle type", nameof(vehicle))
	};

DeliveryTruck t when t.GrossWeightClass switch
{
	> 5000 => 10.00m + 5.00m,
	< 3000 => 10.00m - 2.00m,
	_ => 10.00m,
},
DeliveryTruck t when t.GrossWeightClass switch
{
	< 3000 => 10.00m - 2.00m,
	>= 3000 and <= 5000 => 10.00m,
	> 5000 => 10.00m + 5.00m,
},

switch (DateTime.Now.DayOfWeek)
{
	case DayOfWeek.Sunday:
	case DayOfWeek.Saturday:
		Console.WriteLine("The weekend");
		break;
	case DayOfWeek.Monday:
		Console.WriteLine("The first day of the work week.");
		break;
	case DayOfWeek.Friday:
		Console.WriteLine("The last day of the work week.");
		break;
	default:
		Console.WriteLine("The middle of the work week.");
		break;
}

switch (str)
{
	case "1":
	case "small":
		cost += 25;
		break;
	case "2":
	case "medium":
		cost += 25;
		goto case "1";
	case "3":
	case "large":
		cost += 50;
		goto case "1";
	default:
		Console.WriteLine("Invalid selection. Please select 1, 2, or 3.");
		break;
}

switch (sh)
{
	// Note that this code never evaluates to true.
	case Shape shape when shape == null:
		break;
	case null:
		break;
	case Rectangle r when r.Length == r.Width && r.Area > 0:
		break;
	default:
		break;
}

switch (coll)
{
	case Array arr:
		break;
	case IEnumerable<int> ieInt:
		break;
	case object o:
		break;
	default:
		break;
}

bool IsValidPercentage(object x) => x is
	>= 0 and <= 100 or    // integer tests
	>= 0F and <= 100F or  // float tests
	>= 0D and <= 100D;    // double tests

bool isSmallByte(object o) => o is byte and < 100;

case (0, int x):
case (int x, 0):
	Console.WriteLine(x);

case < 2: break;
case 0 or 1 or 2 or 3 or 4 or 5: break;

int x = b switch { <100 => 0, 100 => 1, 101 => 2, >101 => 3 };

----------------------------------------------------

[
	["keyword", "public"],
	["keyword", "static"],
	["return-type", [
		["keyword", "decimal"]
	]],
	["function", "CalculateToll"],
	["punctuation", "("],
	["class-name", [
		["keyword", "object"]
	]],
	" vehicle",
	["punctuation", ")"],
	["operator", "=>"],

	"\r\n\tvehicle ",
	["keyword", "switch"],

	["punctuation", "{"],

	["class-name", ["DeliveryTruck"]],
	" t ",
	["keyword", "when"],
	" t",
	["punctuation", "."],
	"GrossWeightClass ",
	["operator", ">"],
	["number", "5000"],
	["operator", "=>"],
	["number", "10.00m"],
	["operator", "+"],
	["number", "5.00m"],
	["punctuation", ","],

	["class-name", ["DeliveryTruck"]],
	" t ",
	["keyword", "when"],
	" t",
	["punctuation", "."],
	"GrossWeightClass ",
	["operator", "<"],
	["number", "3000"],
	["operator", "=>"],
	["number", "10.00m"],
	["operator", "-"],
	["number", "2.00m"],
	["punctuation", ","],

	["return-type", ["DeliveryTruck"]],
	" _ ",
	["operator", "=>"],
	["number", "10.00m"],
	["punctuation", ","],

	"\r\n\t\t_ ",
	["operator", "=>"],
	["keyword", "throw"],
	["keyword", "new"],
	["constructor-invocation", ["ArgumentException"]],
	["punctuation", "("],
	["string", "\"Not a known vehicle type\""],
	["punctuation", ","],
	["keyword", "nameof"],
	["punctuation", "("],
	"vehicle",
	["punctuation", ")"],
	["punctuation", ")"],

	["punctuation", "}"],
	["punctuation", ";"],

	["class-name", ["DeliveryTruck"]],
	" t ",
	["keyword", "when"],
	" t",
	["punctuation", "."],
	"GrossWeightClass ",
	["keyword", "switch"],

	["punctuation", "{"],

	["operator", ">"],
	["number", "5000"],
	["operator", "=>"],
	["number", "10.00m"],
	["operator", "+"],
	["number", "5.00m"],
	["punctuation", ","],

	["operator", "<"],
	["number", "3000"],
	["operator", "=>"],
	["number", "10.00m"],
	["operator", "-"],
	["number", "2.00m"],
	["punctuation", ","],

	"\r\n\t_ ",
	["operator", "=>"],
	["number", "10.00m"],
	["punctuation", ","],

	["punctuation", "}"],
	["punctuation", ","],

	["class-name", ["DeliveryTruck"]],
	" t ",
	["keyword", "when"],
	" t",
	["punctuation", "."],
	"GrossWeightClass ",
	["keyword", "switch"],

	["punctuation", "{"],

	["operator", "<"],
	["number", "3000"],
	["operator", "=>"],
	["number", "10.00m"],
	["operator", "-"],
	["number", "2.00m"],
	["punctuation", ","],

	["operator", ">="],
	["number", "3000"],
	["keyword", "and"],
	["operator", "<="],
	["number", "5000"],
	["operator", "=>"],
	["number", "10.00m"],
	["punctuation", ","],

	["operator", ">"],
	["number", "5000"],
	["operator", "=>"],
	["number", "10.00m"],
	["operator", "+"],
	["number", "5.00m"],
	["punctuation", ","],

	["punctuation", "}"],
	["punctuation", ","],

	["keyword", "switch"],
	["punctuation", "("],
	"DateTime",
	["punctuation", "."],
	"Now",
	["punctuation", "."],
	"DayOfWeek",
	["punctuation", ")"],

	["punctuation", "{"],

	["keyword", "case"],
	" DayOfWeek",
	["punctuation", "."],
	"Sunday",
	["punctuation", ":"],

	["keyword", "case"],
	" DayOfWeek",
	["punctuation", "."],
	"Saturday",
	["punctuation", ":"],

	"\r\n\t\tConsole",
	["punctuation", "."],
	["function", "WriteLine"],
	["punctuation", "("],
	["string", "\"The weekend\""],
	["punctuation", ")"],
	["punctuation", ";"],

	["keyword", "break"],
	["punctuation", ";"],

	["keyword", "case"],
	" DayOfWeek",
	["punctuation", "."],
	"Monday",
	["punctuation", ":"],

	"\r\n\t\tConsole",
	["punctuation", "."],
	["function", "WriteLine"],
	["punctuation", "("],
	["string", "\"The first day of the work week.\""],
	["punctuation", ")"],
	["punctuation", ";"],

	["keyword", "break"],
	["punctuation", ";"],

	["keyword", "case"],
	" DayOfWeek",
	["punctuation", "."],
	"Friday",
	["punctuation", ":"],

	"\r\n\t\tConsole",
	["punctuation", "."],
	["function", "WriteLine"],
	["punctuation", "("],
	["string", "\"The last day of the work week.\""],
	["punctuation", ")"],
	["punctuation", ";"],

	["keyword", "break"],
	["punctuation", ";"],

	["keyword", "default"],
	["punctuation", ":"],

	"\r\n\t\tConsole",
	["punctuation", "."],
	["function", "WriteLine"],
	["punctuation", "("],
	["string", "\"The middle of the work week.\""],
	["punctuation", ")"],
	["punctuation", ";"],

	["keyword", "break"],
	["punctuation", ";"],

	["punctuation", "}"],

	["keyword", "switch"],
	["punctuation", "("],
	"str",
	["punctuation", ")"],

	["punctuation", "{"],

	["keyword", "case"],
	["string", "\"1\""],
	["punctuation", ":"],

	["keyword", "case"],
	["string", "\"small\""],
	["punctuation", ":"],

	"\r\n\t\tcost ",
	["operator", "+="],
	["number", "25"],
	["punctuation", ";"],

	["keyword", "break"],
	["punctuation", ";"],

	["keyword", "case"],
	["string", "\"2\""],
	["punctuation", ":"],

	["keyword", "case"],
	["string", "\"medium\""],
	["punctuation", ":"],

	"\r\n\t\tcost ",
	["operator", "+="],
	["number", "25"],
	["punctuation", ";"],

	["keyword", "goto"],
	["keyword", "case"],
	["string", "\"1\""],
	["punctuation", ";"],

	["keyword", "case"],
	["string", "\"3\""],
	["punctuation", ":"],

	["keyword", "case"],
	["string", "\"large\""],
	["punctuation", ":"],

	"\r\n\t\tcost ",
	["operator", "+="],
	["number", "50"],
	["punctuation", ";"],

	["keyword", "goto"],
	["keyword", "case"],
	["string", "\"1\""],
	["punctuation", ";"],

	["keyword", "default"],
	["punctuation", ":"],

	"\r\n\t\tConsole",
	["punctuation", "."],
	["function", "WriteLine"],
	["punctuation", "("],
	["string", "\"Invalid selection. Please select 1, 2, or 3.\""],
	["punctuation", ")"],
	["punctuation", ";"],

	["keyword", "break"],
	["punctuation", ";"],

	["punctuation", "}"],

	["keyword", "switch"],
	["punctuation", "("],
	"sh",
	["punctuation", ")"],

	["punctuation", "{"],

	["comment", "// Note that this code never evaluates to true."],

	["keyword", "case"],
	["class-name", ["Shape"]],
	" shape ",
	["keyword", "when"],
	" shape ",
	["operator", "=="],
	["keyword", "null"],
	["punctuation", ":"],

	["keyword", "break"],
	["punctuation", ";"],

	["keyword", "case"],
	["keyword", "null"],
	["punctuation", ":"],

	["keyword", "break"],
	["punctuation", ";"],

	["keyword", "case"],
	["class-name", ["Rectangle"]],
	" r ",
	["keyword", "when"],
	" r",
	["punctuation", "."],
	"Length ",
	["operator", "=="],
	" r",
	["punctuation", "."],
	"Width ",
	["operator", "&&"],
	" r",
	["punctuation", "."],
	"Area ",
	["operator", ">"],
	["number", "0"],
	["punctuation", ":"],

	["keyword", "break"],
	["punctuation", ";"],

	["keyword", "default"],
	["punctuation", ":"],

	["keyword", "break"],
	["punctuation", ";"],

	["punctuation", "}"],

	["keyword", "switch"],
	["punctuation", "("],
	"coll",
	["punctuation", ")"],

	["punctuation", "{"],

	["keyword", "case"],
	["class-name", ["Array"]],
	" arr",
	["punctuation", ":"],

	["keyword", "break"],
	["punctuation", ";"],

	["keyword", "case"],
	["class-name", [
		"IEnumerable",
		["punctuation", "<"],
		["keyword", "int"],
		["punctuation", ">"]
	]],
	" ieInt",
	["punctuation", ":"],

	["keyword", "break"],
	["punctuation", ";"],

	["keyword", "case"],
	["class-name", [
		["keyword", "object"]
	]],
	" o",
	["punctuation", ":"],

	["keyword", "break"],
	["punctuation", ";"],

	["keyword", "default"],
	["punctuation", ":"],

	["keyword", "break"],
	["punctuation", ";"],

	["punctuation", "}"],

	["return-type", [
		["keyword", "bool"]
	]],
	["function", "IsValidPercentage"],
	["punctuation", "("],
	["class-name", [
		["keyword", "object"]
	]],
	" x",
	["punctuation", ")"],
	["operator", "=>"],
	" x ",
	["keyword", "is"],

	["operator", ">="],
	["number", "0"],
	["keyword", "and"],
	["operator", "<="],
	["number", "100"],
	["keyword", "or"],
	["comment", "// integer tests"],

	["operator", ">="],
	["number", "0F"],
	["keyword", "and"],
	["operator", "<="],
	["number", "100F"],
	["keyword", "or"],
	["comment", "// float tests"],

	["operator", ">="],
	["number", "0D"],
	["keyword", "and"],
	["operator", "<="],
	["number", "100D"],
	["punctuation", ";"],
	["comment", "// double tests"],

	["return-type", [
		["keyword", "bool"]
	]],
	["function", "isSmallByte"],
	["punctuation", "("],
	["class-name", [
		["keyword", "object"]
	]],
	" o",
	["punctuation", ")"],
	["operator", "=>"],
	" o ",
	["keyword", "is"],
	["class-name", [
		["keyword", "byte"]
	]],
	["keyword", "and"],
	["operator", "<"],
	["number", "100"],
	["punctuation", ";"],

	["keyword", "case"],
	["punctuation", "("],
	["number", "0"],
	["punctuation", ","],
	["class-name", [
		["keyword", "int"]
	]],
	" x",
	["punctuation", ")"],
	["punctuation", ":"],

	["keyword", "case"],
	["punctuation", "("],
	["class-name", [
		["keyword", "int"]
	]],
	" x",
	["punctuation", ","],
	["number", "0"],
	["punctuation", ")"],
	["punctuation", ":"],

	"\r\n\tConsole",
	["punctuation", "."],
	["function", "WriteLine"],
	["punctuation", "("],
	"x",
	["punctuation", ")"],
	["punctuation", ";"],

	["keyword", "case"],
	["operator", "<"],
	["number", "2"],
	["punctuation", ":"],
	["keyword", "break"],
	["punctuation", ";"],

	["keyword", "case"],
	["number", "0"],
	["keyword", "or"],
	["number", "1"],
	["keyword", "or"],
	["number", "2"],
	["keyword", "or"],
	["number", "3"],
	["keyword", "or"],
	["number", "4"],
	["keyword", "or"],
	["number", "5"],
	["punctuation", ":"],
	["keyword", "break"],
	["punctuation", ";"],

	["class-name", [
		["keyword", "int"]
	]],
	" x ",
	["operator", "="],
	" b ",
	["keyword", "switch"],
	["punctuation", "{"],
	["operator", "<"],
	["number", "100"],
	["operator", "=>"],
	["number", "0"],
	["punctuation", ","],
	["number", "100"],
	["operator", "=>"],
	["number", "1"],
	["punctuation", ","],
	["number", "101"],
	["operator", "=>"],
	["number", "2"],
	["punctuation", ","],
	["operator", ">"],
	["number", "101"],
	["operator", "=>"],
	["number", "3"],
	["punctuation", "}"],
	["punctuation", ";"]
]

----------------------------------------------------

Checks for switch statements and expressions.
