// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
import { assertEquals } from "jsr:@std/assert@^0.215.0";
import { weekOfYear } from "./week_of_year.ts";

Deno.test({
  name: "weekOfYear()",
  fn: () => {
    assertEquals(weekOfYear(new Date("2020-01-05T03:00:00.000Z")), 1);
    assertEquals(weekOfYear(new Date("2020-06-28T03:00:00.000Z")), 26);

    // iso weeks year starting sunday
    assertEquals(weekOfYear(new Date(2012, 0, 1)), 52);
    assertEquals(weekOfYear(new Date(2012, 0, 2)), 1);
    assertEquals(weekOfYear(new Date(2012, 0, 8)), 1);
    assertEquals(weekOfYear(new Date(2012, 0, 9)), 2);
    assertEquals(weekOfYear(new Date(2012, 0, 15)), 2);

    // iso weeks year starting monday
    assertEquals(weekOfYear(new Date(2007, 0, 1)), 1);
    assertEquals(weekOfYear(new Date(2007, 0, 7)), 1);
    assertEquals(weekOfYear(new Date(2007, 0, 8)), 2);
    assertEquals(weekOfYear(new Date(2007, 0, 14)), 2);
    assertEquals(weekOfYear(new Date(2007, 0, 15)), 3);

    // iso weeks year starting tuesday
    assertEquals(weekOfYear(new Date(2007, 11, 31)), 1);
    assertEquals(weekOfYear(new Date(2008, 0, 1)), 1);
    assertEquals(weekOfYear(new Date(2008, 0, 6)), 1);
    assertEquals(weekOfYear(new Date(2008, 0, 7)), 2);
    assertEquals(weekOfYear(new Date(2008, 0, 13)), 2);
    assertEquals(weekOfYear(new Date(2008, 0, 14)), 3);

    // iso weeks year starting wednesday
    assertEquals(weekOfYear(new Date(2002, 11, 30)), 1);
    assertEquals(weekOfYear(new Date(2003, 0, 1)), 1);
    assertEquals(weekOfYear(new Date(2003, 0, 5)), 1);
    assertEquals(weekOfYear(new Date(2003, 0, 6)), 2);
    assertEquals(weekOfYear(new Date(2003, 0, 12)), 2);
    assertEquals(weekOfYear(new Date(2003, 0, 13)), 3);

    // iso weeks year starting thursday
    assertEquals(weekOfYear(new Date(2008, 11, 29)), 1);
    assertEquals(weekOfYear(new Date(2009, 0, 1)), 1);
    assertEquals(weekOfYear(new Date(2009, 0, 4)), 1);
    assertEquals(weekOfYear(new Date(2009, 0, 5)), 2);
    assertEquals(weekOfYear(new Date(2009, 0, 11)), 2);
    assertEquals(weekOfYear(new Date(2009, 0, 13)), 3);

    // iso weeks year starting friday
    assertEquals(weekOfYear(new Date(2009, 11, 28)), 53);
    assertEquals(weekOfYear(new Date(2010, 0, 1)), 53);
    assertEquals(weekOfYear(new Date(2010, 0, 3)), 53);
    assertEquals(weekOfYear(new Date(2010, 0, 4)), 1);
    assertEquals(weekOfYear(new Date(2010, 0, 10)), 1);
    assertEquals(weekOfYear(new Date(2010, 0, 11)), 2);

    // iso weeks year starting saturday
    assertEquals(weekOfYear(new Date(2010, 11, 27)), 52);
    assertEquals(weekOfYear(new Date(2011, 0, 1)), 52);
    assertEquals(weekOfYear(new Date(2011, 0, 2)), 52);
    assertEquals(weekOfYear(new Date(2011, 0, 3)), 1);
    assertEquals(weekOfYear(new Date(2011, 0, 9)), 1);
    assertEquals(weekOfYear(new Date(2011, 0, 10)), 2);
  },
});
