|
83 | 83 | (Date(2100, 1, 1), :ns, 4102444800000000000), |
84 | 84 | ] |
85 | 85 |
|
86 | | - for (d, usym, expected) in cases |
| 86 | + @testset "$d $usym" for (d, usym, expected) in cases |
87 | 87 | # 1) DateTime64 with UnitArg symbol |
88 | 88 | dt64 = NumpyDates.DateTime64(d, usym) |
89 | 89 | @test Dates.value(dt64) == expected |
|
99 | 99 | @test NumpyDates.unitpair(inline_dyn) == NumpyDates.unitpair(usym) |
100 | 100 | end |
101 | 101 | end |
| 102 | + |
| 103 | +@testitem "DateTime -> DateTime64/InlineDateTime64" begin |
| 104 | + using Dates |
| 105 | + using PythonCall: NumpyDates |
| 106 | + |
| 107 | + # Data generated by: uv run test/scripts/np_dates.py |
| 108 | + # Format: (Date, unit_symbol, numpy_int_value) |
| 109 | + cases = [ |
| 110 | + (DateTime(1969, 12, 31, 23, 0, 0), :Y, -1), |
| 111 | + (DateTime(1969, 12, 31, 23, 0, 0), :M, -1), |
| 112 | + (DateTime(1969, 12, 31, 23, 0, 0), :D, -1), |
| 113 | + (DateTime(1969, 12, 31, 23, 0, 0), :h, -1), |
| 114 | + (DateTime(1969, 12, 31, 23, 0, 0), :m, -60), |
| 115 | + (DateTime(1969, 12, 31, 23, 0, 0), :s, -3600), |
| 116 | + (DateTime(1969, 12, 31, 23, 0, 0), :ms, -3_600_000), |
| 117 | + (DateTime(1969, 12, 31, 23, 0, 0), :us, -3_600_000_000), |
| 118 | + (DateTime(1969, 12, 31, 23, 0, 0), :ns, -3_600_000_000_000), |
| 119 | + (DateTime(1969, 12, 31, 23, 59, 59), :Y, -1), |
| 120 | + (DateTime(1969, 12, 31, 23, 59, 59), :M, -1), |
| 121 | + (DateTime(1969, 12, 31, 23, 59, 59), :D, -1), |
| 122 | + (DateTime(1969, 12, 31, 23, 59, 59), :h, -1), |
| 123 | + (DateTime(1969, 12, 31, 23, 59, 59), :m, -1), |
| 124 | + (DateTime(1969, 12, 31, 23, 59, 59), :s, -1), |
| 125 | + (DateTime(1969, 12, 31, 23, 59, 59), :ms, -1_000), |
| 126 | + (DateTime(1969, 12, 31, 23, 59, 59), :us, -1_000_000), |
| 127 | + (DateTime(1969, 12, 31, 23, 59, 59), :ns, -1_000_000_000), |
| 128 | + (DateTime(1970, 1, 1, 0, 0, 0), :Y, 0), |
| 129 | + (DateTime(1970, 1, 1, 0, 0, 0), :M, 0), |
| 130 | + (DateTime(1970, 1, 1, 0, 0, 0), :D, 0), |
| 131 | + (DateTime(1970, 1, 1, 0, 0, 0), :h, 0), |
| 132 | + (DateTime(1970, 1, 1, 0, 0, 0), :m, 0), |
| 133 | + (DateTime(1970, 1, 1, 0, 0, 0), :s, 0), |
| 134 | + (DateTime(1970, 1, 1, 0, 0, 0), :ms, 0), |
| 135 | + (DateTime(1970, 1, 1, 0, 0, 0), :us, 0), |
| 136 | + (DateTime(1970, 1, 1, 0, 0, 0), :ns, 0), |
| 137 | + (DateTime(1970, 1, 1, 0, 0, 1), :Y, 0), |
| 138 | + (DateTime(1970, 1, 1, 0, 0, 1), :M, 0), |
| 139 | + (DateTime(1970, 1, 1, 0, 0, 1), :D, 0), |
| 140 | + (DateTime(1970, 1, 1, 0, 0, 1), :h, 0), |
| 141 | + (DateTime(1970, 1, 1, 0, 0, 1), :m, 0), |
| 142 | + (DateTime(1970, 1, 1, 0, 0, 1), :s, 1), |
| 143 | + (DateTime(1970, 1, 1, 0, 0, 1), :ms, 1_000), |
| 144 | + (DateTime(1970, 1, 1, 0, 0, 1), :us, 1_000_000), |
| 145 | + (DateTime(1970, 1, 1, 0, 0, 1), :ns, 1_000_000_000), |
| 146 | + (DateTime(1970, 1, 1, 1, 0, 0), :Y, 0), |
| 147 | + (DateTime(1970, 1, 1, 1, 0, 0), :M, 0), |
| 148 | + (DateTime(1970, 1, 1, 1, 0, 0), :D, 0), |
| 149 | + (DateTime(1970, 1, 1, 1, 0, 0), :h, 1), |
| 150 | + (DateTime(1970, 1, 1, 1, 0, 0), :m, 60), |
| 151 | + (DateTime(1970, 1, 1, 1, 0, 0), :s, 3_600), |
| 152 | + (DateTime(1970, 1, 1, 1, 0, 0), :ms, 3_600_000), |
| 153 | + (DateTime(1970, 1, 1, 1, 0, 0), :us, 3_600_000_000), |
| 154 | + (DateTime(1970, 1, 1, 1, 0, 0), :ns, 3_600_000_000_000), |
| 155 | + (DateTime(1999, 12, 31, 23, 59, 59), :Y, 29), |
| 156 | + (DateTime(1999, 12, 31, 23, 59, 59), :M, 359), |
| 157 | + (DateTime(1999, 12, 31, 23, 59, 59), :D, 10_956), |
| 158 | + (DateTime(1999, 12, 31, 23, 59, 59), :h, 262_967), |
| 159 | + (DateTime(1999, 12, 31, 23, 59, 59), :m, 15_778_079), |
| 160 | + (DateTime(1999, 12, 31, 23, 59, 59), :s, 946_684_799), |
| 161 | + (DateTime(1999, 12, 31, 23, 59, 59), :ms, 946_684_799_000), |
| 162 | + (DateTime(1999, 12, 31, 23, 59, 59), :us, 946_684_799_000_000), |
| 163 | + (DateTime(1999, 12, 31, 23, 59, 59), :ns, 946_684_799_000_000_000), |
| 164 | + (DateTime(2000, 2, 29, 12, 34, 56), :Y, 30), |
| 165 | + (DateTime(2000, 2, 29, 12, 34, 56), :M, 361), |
| 166 | + (DateTime(2000, 2, 29, 12, 34, 56), :D, 11_016), |
| 167 | + (DateTime(2000, 2, 29, 12, 34, 56), :h, 264_396), |
| 168 | + (DateTime(2000, 2, 29, 12, 34, 56), :m, 15_863_794), |
| 169 | + (DateTime(2000, 2, 29, 12, 34, 56), :s, 951_827_696), |
| 170 | + (DateTime(2000, 2, 29, 12, 34, 56), :ms, 951_827_696_000), |
| 171 | + (DateTime(2000, 2, 29, 12, 34, 56), :us, 951_827_696_000_000), |
| 172 | + (DateTime(2000, 2, 29, 12, 34, 56), :ns, 951_827_696_000_000_000), |
| 173 | + (DateTime(1900, 1, 1, 0, 0, 0), :Y, -70), |
| 174 | + (DateTime(1900, 1, 1, 0, 0, 0), :M, -840), |
| 175 | + (DateTime(1900, 1, 1, 0, 0, 0), :D, -25_567), |
| 176 | + (DateTime(1900, 1, 1, 0, 0, 0), :h, -613_608), |
| 177 | + (DateTime(1900, 1, 1, 0, 0, 0), :m, -36_816_480), |
| 178 | + (DateTime(1900, 1, 1, 0, 0, 0), :s, -2_208_988_800), |
| 179 | + (DateTime(1900, 1, 1, 0, 0, 0), :ms, -2_208_988_800_000), |
| 180 | + (DateTime(1900, 1, 1, 0, 0, 0), :us, -2_208_988_800_000_000), |
| 181 | + (DateTime(1900, 1, 1, 0, 0, 0), :ns, -2_208_988_800_000_000_000), |
| 182 | + (DateTime(2100, 1, 1, 0, 0, 0), :Y, 130), |
| 183 | + (DateTime(2100, 1, 1, 0, 0, 0), :M, 1_560), |
| 184 | + (DateTime(2100, 1, 1, 0, 0, 0), :D, 47_482), |
| 185 | + (DateTime(2100, 1, 1, 0, 0, 0), :h, 1_139_568), |
| 186 | + (DateTime(2100, 1, 1, 0, 0, 0), :m, 68_374_080), |
| 187 | + (DateTime(2100, 1, 1, 0, 0, 0), :s, 4_102_444_800), |
| 188 | + (DateTime(2100, 1, 1, 0, 0, 0), :ms, 4_102_444_800_000), |
| 189 | + (DateTime(2100, 1, 1, 0, 0, 0), :us, 4_102_444_800_000_000), |
| 190 | + (DateTime(2100, 1, 1, 0, 0, 0), :ns, 4_102_444_800_000_000_000), |
| 191 | + ] |
| 192 | + |
| 193 | + @testset "$dt $usym" for (dt, usym, expected) in cases |
| 194 | + # 1) DateTime64 with UnitArg symbol |
| 195 | + dt64 = NumpyDates.DateTime64(dt, usym) |
| 196 | + @test Dates.value(dt64) == expected |
| 197 | + |
| 198 | + # 2) InlineDateTime64 with type parameter Unit constant |
| 199 | + Uconst = NumpyDates.Unit(usym) |
| 200 | + inline_typed = NumpyDates.InlineDateTime64{Uconst}(dt) |
| 201 | + @test Dates.value(inline_typed) == expected |
| 202 | + |
| 203 | + # 3) InlineDateTime64 with runtime UnitArg symbol |
| 204 | + inline_dyn = NumpyDates.InlineDateTime64(dt, usym) |
| 205 | + @test Dates.value(inline_dyn) == expected |
| 206 | + @test NumpyDates.unitpair(inline_dyn) == NumpyDates.unitpair(usym) |
| 207 | + end |
| 208 | +end |
0 commit comments