tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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);