From b4205e215d96dc81b1d0183445cd2f224c9c0c07 Mon Sep 17 00:00:00 2001 From: sabiwara Date: Fri, 23 May 2025 16:22:08 +0900 Subject: [PATCH 1/5] Add tests for Date.utc_today/1 --- lib/elixir/test/elixir/calendar/date_test.exs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/elixir/test/elixir/calendar/date_test.exs b/lib/elixir/test/elixir/calendar/date_test.exs index 32b5f5f5b68..72936fcbc3a 100644 --- a/lib/elixir/test/elixir/calendar/date_test.exs +++ b/lib/elixir/test/elixir/calendar/date_test.exs @@ -266,4 +266,18 @@ defmodule DateTest do Date.shift(date, month: 1) end end + + test "utc_today/1" do + date = Date.utc_today() + assert date.year > 2020 + assert date.calendar == Calendar.ISO + + date = Date.utc_today(Calendar.ISO) + assert date.year > 2020 + assert date.calendar == Calendar.ISO + + date = Date.utc_today(Calendar.Holocene) + assert date.year > 12020 + assert date.calendar == Calendar.Holocene + end end From c2e75b7019734da68972498831db934d2b02f428 Mon Sep 17 00:00:00 2001 From: sabiwara Date: Fri, 23 May 2025 16:30:24 +0900 Subject: [PATCH 2/5] Add test for non-integer duration shift --- lib/elixir/test/elixir/calendar/date_test.exs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/elixir/test/elixir/calendar/date_test.exs b/lib/elixir/test/elixir/calendar/date_test.exs index 72936fcbc3a..b9e851ade50 100644 --- a/lib/elixir/test/elixir/calendar/date_test.exs +++ b/lib/elixir/test/elixir/calendar/date_test.exs @@ -249,6 +249,10 @@ defmodule DateTest do "unknown unit :months. Expected :year, :month, :week, :day", fn -> Date.shift(~D[2012-01-01], months: 12) end + assert_raise ArgumentError, + "unsupported value nil for :day. Expected an integer", + fn -> Date.shift(~D[2012-02-29], year: 1, day: nil) end + assert_raise ArgumentError, "cannot shift date by time scale unit. Expected :year, :month, :week, :day", fn -> Date.shift(~D[2012-02-29], %Duration{second: 86400}) end From e5fd6e46afc2fe2e9105d14906f36aa84380bf7c Mon Sep 17 00:00:00 2001 From: sabiwara Date: Fri, 23 May 2025 16:33:20 +0900 Subject: [PATCH 3/5] Add test for Date.convert!/2 with incompatible calendars --- lib/elixir/test/elixir/calendar/date_test.exs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/elixir/test/elixir/calendar/date_test.exs b/lib/elixir/test/elixir/calendar/date_test.exs index b9e851ade50..16b885e8037 100644 --- a/lib/elixir/test/elixir/calendar/date_test.exs +++ b/lib/elixir/test/elixir/calendar/date_test.exs @@ -180,10 +180,14 @@ defmodule DateTest do |> Date.convert!(Calendar.Holocene) |> Date.convert!(Calendar.ISO) == ~D[2000-01-01] - assert Date.convert(~D[2016-02-03], FakeCalendar) == {:error, :incompatible_calendars} - assert Date.convert(~N[2000-01-01 00:00:00], Calendar.Holocene) == {:ok, Calendar.Holocene.date(12000, 01, 01)} + + assert Date.convert(~D[2016-02-03], FakeCalendar) == {:error, :incompatible_calendars} + + assert_raise ArgumentError, + "cannot convert ~D[2016-02-03] to target calendar FakeCalendar, reason: :incompatible_calendars", + fn -> Date.convert!(~D[2016-02-03], FakeCalendar) end end test "add/2" do From 799b4ffbcff788ea63bf5fb5622c6354b7312b32 Mon Sep 17 00:00:00 2001 From: sabiwara Date: Fri, 23 May 2025 16:38:47 +0900 Subject: [PATCH 4/5] Add test for Date.diff/2 with incompatible calendars --- lib/elixir/test/elixir/calendar/date_test.exs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/elixir/test/elixir/calendar/date_test.exs b/lib/elixir/test/elixir/calendar/date_test.exs index 16b885e8037..ffd6cf49a2c 100644 --- a/lib/elixir/test/elixir/calendar/date_test.exs +++ b/lib/elixir/test/elixir/calendar/date_test.exs @@ -218,6 +218,10 @@ defmodule DateTest do date2 = Calendar.Holocene.date(12000, 01, 14) assert Date.diff(date1, date2) == -13 assert Date.diff(date2, date1) == 13 + + assert_raise ArgumentError, + ~r/cannot calculate the difference between .* because their calendars are not compatible/, + fn -> Date.diff(date1, %{date2 | calendar: FakeCalendar}) end end test "shift/2" do From 71ea2c09792b2275d093a78d91aa2e65ddb776e0 Mon Sep 17 00:00:00 2001 From: sabiwara Date: Fri, 23 May 2025 16:42:24 +0900 Subject: [PATCH 5/5] Add test for Date.compare/2 with incompatible calendars --- lib/elixir/test/elixir/calendar/date_test.exs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/elixir/test/elixir/calendar/date_test.exs b/lib/elixir/test/elixir/calendar/date_test.exs index ffd6cf49a2c..c7d33533335 100644 --- a/lib/elixir/test/elixir/calendar/date_test.exs +++ b/lib/elixir/test/elixir/calendar/date_test.exs @@ -91,6 +91,10 @@ defmodule DateTest do assert Date.compare(date4, date5) == :gt assert Date.compare(date5, date4) == :lt assert Date.compare(date5, date5) == :eq + + assert_raise ArgumentError, + ~r/cannot compare .*\n\n.* their calendars have incompatible day rollover moments/, + fn -> Date.compare(date1, %{date2 | calendar: FakeCalendar}) end end test "before?/2 and after?/2" do