text: // |reftest| skip-if(!this.hasOwnProperty("Intl"))
  
  function civilDate(options, date) {
      var opts = Object.assign({timeZone: "Asia/Riyadh"}, options);
      return new Intl.DateTimeFormat("ar-SA-u-ca-islamic-civil-nu-latn", opts).format(date);
  }
  
  function tabularDate(options, date) {
      var opts = Object.assign({timeZone: "Asia/Riyadh"}, options);
      return new Intl.DateTimeFormat("ar-SA-u-ca-islamic-tbla-nu-latn", opts).format(date);
  }
  
  function sightingDate(options, date) {
      var opts = Object.assign({timeZone: "Asia/Riyadh"}, options);
      return new Intl.DateTimeFormat("ar-SA-u-ca-islamic-rgsa-nu-latn", opts).format(date);
  }
  
  function ummAlQuraDate(options, date) {
      var opts = Object.assign({timeZone: "Asia/Riyadh"}, options);
      return new Intl.DateTimeFormat("ar-SA-u-ca-umalqura-nu-latn", opts).format(date);
  }
  
  // Test islamic-tbla (Tabular / Thursday epoch).
  // Compare with islamic-civil (Tabular / Friday epoch).
  function testIslamicTbla() {
      var date = new Date(Date.UTC(2015, 1 - 1, 1));
  
      // Month and year are the same.
      var monthYear = {year: "numeric", month: "numeric"};
      assertEq(civilDate(monthYear, date), tabularDate(monthYear, date));
  
      // Day is different by one.
      var day = {day: "numeric"};
      assertEq(Number(civilDate(day, date)) - Number(tabularDate(day, date)), -1);
  }
  
  // Test islamic-rgsa (Saudi Arabia sighting).
  // Sighting of the hilal (crescent moon) in Saudi Arabia.
  function testIslamicRgsa() {
      var date1 = new Date(Date.UTC(1975, 5 - 1, 6));
      var date2 = new Date(Date.UTC(2015, 1 - 1, 1));
      var dayMonthYear = {year: "numeric", month: "numeric", day: "numeric"};
  
      assertEq(sightingDate(dayMonthYear, date1), tabularDate(dayMonthYear, date1));
      assertEq(sightingDate(dayMonthYear, date2), civilDate(dayMonthYear, date2));
  }
  
  // Test islamic-umalqura (Umm al-Qura).
  function testIslamicUmalqura() {
      var year = {year: "numeric"};
      var month = {month: "numeric"};
      var day = {day: "numeric"};
  
      // From ICU test files, which in turn was generated from:
      //   Official Umm-al-Qura calendar of SA:
      //   home, http://www.ummulqura.org.sa/default.aspx
      //   converter, http://www.ummulqura.org.sa/Index.aspx
      var dates = [
          [ {year: 2016, month:  1, day: 11}, {year: 1437, month:  4, day: 1} ],
          [ {year: 2016, month:  2, day: 10}, {year: 1437, month:  5, day: 1} ],
          [ {year: 2016, month:  3, day: 10}, {year: 1437, month:  6, day: 1} ],
          [ {year: 2016, month:  4, day:  8}, {year: 1437, month:  7, day: 1} ],
          [ {year: 2016, month:  5, day:  8}, {year: 1437, month:  8, day: 1} ],
          [ {year: 2016, month:  6, day:  6}, {year: 1437, month:  9, day: 1} ],
          [ {year: 2016, month:  7, day:  6}, {year: 1437, month: 10, day: 1} ],
          [ {year: 2016, month:  8, day:  4}, {year: 1437, month: 11, day: 1} ],
          [ {year: 2016, month:  9, day:  2}, {year: 1437, month: 12, day: 1} ],
          [ {year: 2016, month: 10, day:  2}, {year: 1438, month:  1, day: 1} ],
          [ {year: 2016, month: 11, day:  1}, {year: 1438, month:  2, day: 1} ],
          [ {year: 2016, month: 11, day: 30}, {year: 1438, month:  3, day: 1} ],
          [ {year: 2016, month: 12, day: 30}, {year: 1438, month:  4, day: 1} ],
      ];
  
      for (var [gregorian, ummAlQura] of dates) {
          var date = new Date(Date.UTC(gregorian.year, gregorian.month - 1, gregorian.day));
  
          // Use parseInt() to remove the trailing era indicator.
          assertEq(parseInt(ummAlQuraDate(year, date), 10), ummAlQura.year);
          assertEq(Number(ummAlQuraDate(month, date)), ummAlQura.month);
          assertEq(Number(ummAlQuraDate(day, date)), ummAlQura.day);
      }
  }
  
  testIslamicTbla();
  testIslamicRgsa();
  testIslamicUmalqura();
  
  if (typeof reportCompare === "function")
      reportCompare(0, 0, "ok");
  