From 4c01913b61aec61393f622ace0684472997b5300 Mon Sep 17 00:00:00 2001 From: Theodor Fiedler Date: Thu, 14 Nov 2024 14:34:13 +0100 Subject: [PATCH 1/2] Ignore microsecond precision when validating shift date duration --- lib/elixir/lib/calendar/iso.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/elixir/lib/calendar/iso.ex b/lib/elixir/lib/calendar/iso.ex index d016bf8113b..aa18c26eec2 100644 --- a/lib/elixir/lib/calendar/iso.ex +++ b/lib/elixir/lib/calendar/iso.ex @@ -1710,7 +1710,7 @@ defmodule Calendar.ISO do hour: 0, minute: 0, second: 0, - microsecond: {0, 0} + microsecond: {0, _precision} }) do [ month: year * 12 + month, From 7affa29276f7327c69e43d4480ab7f541018f5e6 Mon Sep 17 00:00:00 2001 From: Theodor Fiedler Date: Thu, 14 Nov 2024 14:52:52 +0100 Subject: [PATCH 2/2] add test --- lib/elixir/test/elixir/calendar/date_test.exs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/elixir/test/elixir/calendar/date_test.exs b/lib/elixir/test/elixir/calendar/date_test.exs index d0e4a6812d5..d2b34d67e3d 100644 --- a/lib/elixir/test/elixir/calendar/date_test.exs +++ b/lib/elixir/test/elixir/calendar/date_test.exs @@ -249,6 +249,13 @@ defmodule DateTest do "cannot shift date by time scale unit. Expected :year, :month, :week, :day", fn -> Date.shift(~D[2012-02-29], %Duration{second: 86400}) end + # Microsecond precision is ignored + assert Date.shift(~D[2012-02-29], Duration.new!(microsecond: {0, 6})) == ~D[2012-02-29] + + assert_raise ArgumentError, + "cannot shift date by time scale unit. Expected :year, :month, :week, :day", + fn -> Date.shift(~D[2012-02-29], %Duration{microsecond: {100, 6}}) end + # Implements calendar callback assert_raise RuntimeError, "shift_date/4 not implemented", fn -> date = Calendar.Holocene.date(10000, 01, 01)