// Test file for pattern guards io.out "=== Testing Pattern Guards ==="; // Test basic guard with literal pattern classifyNumber : n -> when n is 0 if n = 0 then "exactly zero" n if n > 0 then "positive" n if n < 0 then "negative" _ then "unknown"; io.out "classifyNumber 5:"; io.out (classifyNumber 5); // Should be "positive" io.out "classifyNumber -3:"; io.out (classifyNumber -3); // Should be "negative" io.out "classifyNumber 0:"; io.out (classifyNumber 0); // Should be "exactly zero" // Test guard with range conditions (avoiding .. operator) categorizeAge : age -> when age is a if (a >= 0 and a < 18) then "minor" a if (a >= 18 and a < 65) then "adult" a if (a >= 65) then "senior" _ then "invalid"; io.out "categorizeAge 16:"; io.out (categorizeAge 16); // Should be "minor" io.out "categorizeAge 30:"; io.out (categorizeAge 30); // Should be "adult" io.out "categorizeAge 70:"; io.out (categorizeAge 70); // Should be "senior" // Test guard with complex conditions gradeStudent : score -> when score is s if (s >= 90) then "A" s if (s >= 80 and s < 90) then "B" s if (s >= 70 and s < 80) then "C" s if (s >= 60 and s < 70) then "D" s if (s < 60) then "F" _ then "Invalid score"; io.out "gradeStudent 95:"; io.out (gradeStudent 95); // Should be "A" io.out "gradeStudent 75:"; io.out (gradeStudent 75); // Should be "C" io.out "gradeStudent 45:"; io.out (gradeStudent 45); // Should be "F" io.out "=== Pattern Guards Tests Completed ===";