// |reftest| skip-if(!this.hasOwnProperty("Intl"))

const tzMapper = [
    x => x,
    x => x.toUpperCase(),
    x => x.toLowerCase(),
];

// Link names derived from IANA Time Zone Database, version tzdata2016g.
const links = [
    ["Africa/Asmera", "Africa/Asmara"],
    ["America/Atka", "America/Adak"],
    ["America/Buenos_Aires", "America/Argentina/Buenos_Aires"],
    ["America/Catamarca", "America/Argentina/Catamarca"],
    ["America/Cordoba", "America/Argentina/Cordoba"],
    ["America/Fort_Wayne", "America/Indiana/Indianapolis"],
    ["America/Indianapolis", "America/Indiana/Indianapolis"],
    ["America/Jujuy", "America/Argentina/Jujuy"],
    ["America/Knox_IN", "America/Indiana/Knox"],
    ["America/Kralendijk", "America/Curacao"],
    ["America/Louisville", "America/Kentucky/Louisville"],
    ["America/Lower_Princes", "America/Curacao"],
    ["America/Marigot", "America/Port_of_Spain"],
    ["America/Mendoza", "America/Argentina/Mendoza"],
    ["America/Porto_Acre", "America/Rio_Branco"],
    ["America/Santa_Isabel", "America/Tijuana"],
    ["America/Shiprock", "America/Denver"],
    ["America/St_Barthelemy", "America/Port_of_Spain"],
    ["America/Virgin", "America/Port_of_Spain"],
    ["Antarctica/South_Pole", "Antarctica/McMurdo"],
    ["Arctic/Longyearbyen", "Europe/Oslo"],
    ["Asia/Ashkhabad", "Asia/Ashgabat"],
    ["Asia/Calcutta", "Asia/Kolkata"],
    ["Asia/Chungking", "Asia/Chongqing"],
    ["Asia/Dacca", "Asia/Dhaka"],
    ["Asia/Istanbul", "Europe/Istanbul"],
    ["Asia/Katmandu", "Asia/Kathmandu"],
    ["Asia/Macao", "Asia/Macau"],
    ["Asia/Rangoon", "Asia/Yangon"],
    ["Asia/Saigon", "Asia/Ho_Chi_Minh"],
    ["Asia/Thimbu", "Asia/Thimphu"],
    ["Asia/Ujung_Pandang", "Asia/Makassar"],
    ["Asia/Ulan_Bator", "Asia/Ulaanbaatar"],
    ["Atlantic/Faeroe", "Atlantic/Faroe"],
    ["Australia/ACT", "Australia/Sydney"],
    ["Australia/Canberra", "Australia/Sydney"],
    ["Australia/LHI", "Australia/Lord_Howe"],
    ["Australia/NSW", "Australia/Sydney"],
    ["Australia/North", "Australia/Darwin"],
    ["Australia/Queensland", "Australia/Brisbane"],
    ["Australia/South", "Australia/Adelaide"],
    ["Australia/Tasmania", "Australia/Hobart"],
    ["Australia/Victoria", "Australia/Melbourne"],
    ["Australia/West", "Australia/Perth"],
    ["Australia/Yancowinna", "Australia/Broken_Hill"],
    ["Brazil/Acre", "America/Rio_Branco"],
    ["Brazil/DeNoronha", "America/Noronha"],
    ["Brazil/East", "America/Sao_Paulo"],
    ["Brazil/West", "America/Manaus"],
    ["Canada/Atlantic", "America/Halifax"],
    ["Canada/Central", "America/Winnipeg"],
    ["Canada/East-Saskatchewan", "America/Regina"],
    ["Canada/Eastern", "America/Toronto"],
    ["Canada/Mountain", "America/Edmonton"],
    ["Canada/Newfoundland", "America/St_Johns"],
    ["Canada/Pacific", "America/Vancouver"],
    ["Canada/Saskatchewan", "America/Regina"],
    ["Canada/Yukon", "America/Whitehorse"],
    ["Chile/Continental", "America/Santiago"],
    ["Chile/EasterIsland", "Pacific/Easter"],
    ["Cuba", "America/Havana"],
    ["Egypt", "Africa/Cairo"],
    ["Eire", "Europe/Dublin"],
    ["Etc/GMT+0", "Etc/GMT"],
    ["Etc/GMT-0", "Etc/GMT"],
    ["Etc/GMT0", "Etc/GMT"],
    ["Etc/Greenwich", "Etc/GMT"],
    ["Etc/Universal", "Etc/UTC"],
    ["Etc/Zulu", "Etc/UTC"],
    ["Europe/Bratislava", "Europe/Prague"],
    ["Europe/Busingen", "Europe/Zurich"],
    ["Europe/Mariehamn", "Europe/Helsinki"],
    ["Europe/Nicosia", "Asia/Nicosia"],
    ["Europe/Podgorica", "Europe/Belgrade"],
    ["Europe/San_Marino", "Europe/Rome"],
    ["Europe/Vatican", "Europe/Rome"],
    ["GB", "Europe/London"],
    ["GB-Eire", "Europe/London"],
    ["GMT", "Etc/GMT"],
    ["GMT+0", "Etc/GMT"],
    ["GMT-0", "Etc/GMT"],
    ["GMT0", "Etc/GMT"],
    ["Greenwich", "Etc/GMT"],
    ["Hongkong", "Asia/Hong_Kong"],
    ["Iceland", "Atlantic/Reykjavik"],
    ["Iran", "Asia/Tehran"],
    ["Israel", "Asia/Jerusalem"],
    ["Jamaica", "America/Jamaica"],
    ["Japan", "Asia/Tokyo"],
    ["Kwajalein", "Pacific/Kwajalein"],
    ["Libya", "Africa/Tripoli"],
    ["Mexico/BajaNorte", "America/Tijuana"],
    ["Mexico/BajaSur", "America/Mazatlan"],
    ["Mexico/General", "America/Mexico_City"],
    ["NZ", "Pacific/Auckland"],
    ["NZ-CHAT", "Pacific/Chatham"],
    ["Navajo", "America/Denver"],
    ["PRC", "Asia/Shanghai"],
    ["Pacific/Ponape", "Pacific/Pohnpei"],
    ["Pacific/Samoa", "Pacific/Pago_Pago"],
    ["Pacific/Truk", "Pacific/Chuuk"],
    ["Pacific/Yap", "Pacific/Chuuk"],
    ["Poland", "Europe/Warsaw"],
    ["Portugal", "Europe/Lisbon"],
    ["ROC", "Asia/Taipei"],
    ["ROK", "Asia/Seoul"],
    ["Singapore", "Asia/Singapore"],
    ["Turkey", "Europe/Istanbul"],
    ["UCT", "Etc/UCT"],
    ["US/Alaska", "America/Anchorage"],
    ["US/Aleutian", "America/Adak"],
    ["US/Arizona", "America/Phoenix"],
    ["US/Central", "America/Chicago"],
    ["US/East-Indiana", "America/Indiana/Indianapolis"],
    ["US/Eastern", "America/New_York"],
    ["US/Hawaii", "Pacific/Honolulu"],
    ["US/Indiana-Starke", "America/Indiana/Knox"],
    ["US/Michigan", "America/Detroit"],
    ["US/Mountain", "America/Denver"],
    ["US/Pacific", "America/Los_Angeles"],
    ["US/Pacific-New", "America/Los_Angeles"],
    ["US/Samoa", "Pacific/Pago_Pago"],
    ["UTC", "Etc/UTC"],
    ["Universal", "Etc/UTC"],
    ["W-SU", "Europe/Moscow"],
    ["Zulu", "Etc/UTC"],
];

for (let [linkName, target] of links) {
    if (target === "Etc/UTC" || target === "Etc/GMT")
        target = "UTC";

    for (let map of tzMapper) {
        let dtf = new Intl.DateTimeFormat(undefined, {timeZone: map(linkName)});
        assertEq(dtf.resolvedOptions().timeZone, target, `${linkName} -> ${target}`);
    }
}


if (typeof reportCompare === "function")
    reportCompare(0, 0, "ok");
