selectRange.js (2589B)
1 // |reftest| skip-if(!this.hasOwnProperty('Intl')) 2 3 // Any combination returns "other" for "en-US". 4 { 5 let numbers = [0, 0.5, 1.2, 1.5, 1.7, -1, 1, "1", 123456789.123456789, Infinity, -Infinity]; 6 7 const weirdCases = [ 8 NaN, 9 "word", 10 [0, 2], 11 {}, 12 ]; 13 14 for (let type of ["ordinal", "cardinal"]) { 15 let pr = new Intl.PluralRules("en-US", {type}); 16 for (let start of numbers) { 17 for (let end of numbers) { 18 assertEq(pr.selectRange(start, end), "other"); 19 } 20 } 21 22 for (let c of weirdCases) { 23 assertThrowsInstanceOf(() => pr.selectRange(c, 0), RangeError); 24 assertThrowsInstanceOf(() => pr.selectRange(0, c), RangeError); 25 assertThrowsInstanceOf(() => pr.selectRange(c, c), RangeError); 26 } 27 } 28 } 29 30 // fr (French) returns different results. 31 { 32 let ordinal = new Intl.PluralRules("fr", {type: "ordinal"}); 33 let cardinal = new Intl.PluralRules("fr", {type: "cardinal"}); 34 35 assertEq(ordinal.selectRange(1, 1), "one"); 36 assertEq(ordinal.selectRange(0, 1), "other"); 37 38 assertEq(cardinal.selectRange(1, 1), "one"); 39 assertEq(cardinal.selectRange(0, 1), "one"); 40 } 41 42 // cy (Cymraeg) can return any combination. 43 { 44 let ordinal = new Intl.PluralRules("cy", {type: "ordinal"}); 45 46 assertEq(ordinal.selectRange(0, 0), "other"); 47 assertEq(ordinal.selectRange(0, 1), "one"); 48 assertEq(ordinal.selectRange(0, 2), "two"); 49 assertEq(ordinal.selectRange(0, 3), "few"); 50 assertEq(ordinal.selectRange(0, 5), "many"); 51 assertEq(ordinal.selectRange(0, 10), "other"); 52 53 assertEq(ordinal.selectRange(1, 1), "other"); 54 assertEq(ordinal.selectRange(1, 2), "two"); 55 assertEq(ordinal.selectRange(1, 3), "few"); 56 assertEq(ordinal.selectRange(1, 5), "many"); 57 assertEq(ordinal.selectRange(1, 10), "other"); 58 59 assertEq(ordinal.selectRange(2, 2), "other"); 60 assertEq(ordinal.selectRange(2, 3), "few"); 61 assertEq(ordinal.selectRange(2, 5), "many"); 62 assertEq(ordinal.selectRange(2, 10), "other"); 63 64 assertEq(ordinal.selectRange(3, 3), "other"); 65 assertEq(ordinal.selectRange(3, 5), "many"); 66 assertEq(ordinal.selectRange(3, 10), "other"); 67 68 assertEq(ordinal.selectRange(5, 5), "other"); 69 assertEq(ordinal.selectRange(5, 10), "other"); 70 71 assertEq(ordinal.selectRange(10, 10), "other"); 72 } 73 74 // BigInt inputs aren't allowed. 75 { 76 let pr = new Intl.PluralRules("en-US"); 77 78 assertThrowsInstanceOf(() => pr.selectRange(0, 0n), TypeError); 79 assertThrowsInstanceOf(() => pr.selectRange(0n, 0), TypeError); 80 assertThrowsInstanceOf(() => pr.selectRange(0n, 0n), TypeError); 81 } 82 83 if (typeof reportCompare === "function") 84 reportCompare(true, true);