@@ -38,6 +38,18 @@ defmodule TimeTest do
38
38
end
39
39
end
40
40
41
+ test "to_iso8601/2" do
42
+ time1 = ~T[ 23:00:07.005]
43
+ assert Time . to_iso8601 ( time1 ) == "23:00:07.005"
44
+ assert Time . to_iso8601 ( Map . from_struct ( time1 ) ) == "23:00:07.005"
45
+ assert Time . to_iso8601 ( time1 , :basic ) == "230007.005"
46
+
47
+ time2 = ~T[ 23:00:07.005 Calendar.Holocene]
48
+ assert Time . to_iso8601 ( time2 ) == "23:00:07.005"
49
+ assert Time . to_iso8601 ( Map . from_struct ( time2 ) ) == "23:00:07.005"
50
+ assert Time . to_iso8601 ( time2 , :basic ) == "230007.005"
51
+ end
52
+
41
53
test "to_string/1" do
42
54
time = ~T[ 23:00:07.005]
43
55
assert to_string ( time ) == "23:00:07.005"
@@ -65,6 +77,11 @@ defmodule TimeTest do
65
77
assert Time . compare ( time1 , time2 ) == :eq
66
78
assert Time . compare ( time1 , time3 ) == :lt
67
79
assert Time . compare ( time3 , time2 ) == :gt
80
+
81
+ time1_holocene = ~T[ 01:01:01.005 Calendar.Holocene]
82
+ assert Time . compare ( time1_holocene , time1 ) == :eq
83
+ assert Time . compare ( time1_holocene , time2 ) == :eq
84
+ assert Time . compare ( time1_holocene , time3 ) == :lt
68
85
end
69
86
70
87
test "before?/2 and after?/2" do
@@ -78,6 +95,26 @@ defmodule TimeTest do
78
95
assert not Time . after? ( time1 , time2 )
79
96
end
80
97
98
+ test "diff/3" do
99
+ time1 = ~T[ 05:02:01.234]
100
+ time2 = ~T[ 10:00:04.123]
101
+ time1_holocene = ~T[ 05:02:01.234 Calendar.Holocene]
102
+
103
+ assert Time . diff ( time1 , time2 ) == - 17883
104
+ assert Time . diff ( time1 , time2 , :hour ) == - 4
105
+ assert Time . diff ( time1 , time2 , :minute ) == - 298
106
+ assert Time . diff ( time1 , time2 , :second ) == - 17883
107
+ assert Time . diff ( time1 , time2 , :millisecond ) == - 17_882_889
108
+ assert Time . diff ( time1 , time2 , :microsecond ) == - 17_882_889_000
109
+
110
+ assert Time . diff ( time1_holocene , time2 ) == - 17883
111
+ assert Time . diff ( time1_holocene , time2 , :hour ) == - 4
112
+ assert Time . diff ( time1_holocene , time2 , :minute ) == - 298
113
+ assert Time . diff ( time1_holocene , time2 , :second ) == - 17883
114
+ assert Time . diff ( time1_holocene , time2 , :millisecond ) == - 17_882_889
115
+ assert Time . diff ( time1_holocene , time2 , :microsecond ) == - 17_882_889_000
116
+ end
117
+
81
118
test "truncate/2" do
82
119
assert Time . truncate ( ~T[ 01:01:01.123456] , :microsecond ) == ~T[ 01:01:01.123456]
83
120
@@ -128,5 +165,13 @@ defmodule TimeTest do
128
165
assert_raise ArgumentError ,
129
166
"cannot shift time by date scale unit. Expected :hour, :minute, :second, :microsecond" ,
130
167
fn -> Time . shift ( time , % Duration { day: 1 } ) end
168
+
169
+ assert_raise ArgumentError ,
170
+ "unsupported value nil for :minute. Expected an integer" ,
171
+ fn -> Time . shift ( time , minute: nil ) end
172
+
173
+ assert_raise ArgumentError ,
174
+ ~r/ unsupported value 1 for :microsecond. Expected a tuple \{ ms, precision\} / ,
175
+ fn -> Time . shift ( time , microsecond: 1 ) end
131
176
end
132
177
end
0 commit comments