|
525 | 525 | end |
526 | 526 | end |
527 | 527 |
|
| 528 | +@testitem "DateTime64 isnan" begin |
| 529 | + using Dates |
| 530 | + using PythonCall: NumpyDates |
| 531 | + |
| 532 | + units = (:Y, :M, :W, :D, :h, :m, :s, :ms, :us, :ns, :ps, :fs, :as) |
| 533 | + |
| 534 | + # Non-NaT examples should be false |
| 535 | + @test !isnan(NumpyDates.DateTime64(Date(1970, 1, 1), :D)) |
| 536 | + @test !isnan(NumpyDates.DateTime64(DateTime(1970, 1, 1), :ms)) |
| 537 | + @test !isnan(NumpyDates.InlineDateTime64{NumpyDates.SECONDS}(0)) |
| 538 | + @test !isnan(NumpyDates.InlineDateTime64(0, :ns)) |
| 539 | + |
| 540 | + # NaT via strings for each unit |
| 541 | + @testset "NaT string -> $u" for u in units |
| 542 | + x = NumpyDates.DateTime64("NaT", u) |
| 543 | + @test isnan(x) |
| 544 | + xi = NumpyDates.InlineDateTime64{NumpyDates.Unit(u)}("NaT") |
| 545 | + @test isnan(xi) |
| 546 | + xid = NumpyDates.InlineDateTime64("NaT", u) |
| 547 | + @test isnan(xid) |
| 548 | + end |
| 549 | + |
| 550 | + # NaT via sentinel (typemin(Int64)) |
| 551 | + @testset "NAT sentinel -> $u" for u in units |
| 552 | + x = NumpyDates.DateTime64(NumpyDates.NAT, u) |
| 553 | + @test isnan(x) |
| 554 | + xi = NumpyDates.InlineDateTime64{NumpyDates.Unit(u)}(NumpyDates.NAT) |
| 555 | + @test isnan(xi) |
| 556 | + end |
| 557 | + |
| 558 | + # Changing unit on NaT remains NaT |
| 559 | + nat_d = NumpyDates.DateTime64("NaT", :D) |
| 560 | + y = NumpyDates.DateTime64(nat_d, :s) |
| 561 | + @test isnan(y) |
| 562 | +end |
| 563 | + |
528 | 564 | @testitem "TimeDelta64 from Dates.Period" begin |
529 | 565 | using Dates |
530 | 566 | using PythonCall: NumpyDates |
|
748 | 784 | end |
749 | 785 | end |
750 | 786 |
|
| 787 | +@testitem "TimeDelta64 isnan" begin |
| 788 | + using Dates |
| 789 | + using PythonCall: NumpyDates |
| 790 | + |
| 791 | + units = (:Y, :M, :W, :D, :h, :m, :s, :ms, :us, :ns, :ps, :fs, :as) |
| 792 | + |
| 793 | + # Non-NaT examples should be false |
| 794 | + @test !isnan(NumpyDates.TimeDelta64(0, :s)) |
| 795 | + @test !isnan(NumpyDates.TimeDelta64(Day(1), :D)) |
| 796 | + @test !isnan(NumpyDates.InlineTimeDelta64{NumpyDates.MINUTES}(0)) |
| 797 | + @test !isnan(NumpyDates.InlineTimeDelta64(0, :ns)) |
| 798 | + |
| 799 | + # NaT via strings for each unit |
| 800 | + @testset "NaT string -> $u" for u in units |
| 801 | + x = NumpyDates.TimeDelta64("NaT", u) |
| 802 | + @test isnan(x) |
| 803 | + xi = NumpyDates.InlineTimeDelta64{NumpyDates.Unit(u)}("NaT") |
| 804 | + @test isnan(xi) |
| 805 | + xid = NumpyDates.InlineTimeDelta64("NaT", u) |
| 806 | + @test isnan(xid) |
| 807 | + end |
| 808 | + |
| 809 | + # NaT via sentinel (typemin(Int64)) |
| 810 | + @testset "NAT sentinel -> $u" for u in units |
| 811 | + x = NumpyDates.TimeDelta64(NumpyDates.NAT, u) |
| 812 | + @test isnan(x) |
| 813 | + xi = NumpyDates.InlineTimeDelta64{NumpyDates.Unit(u)}(NumpyDates.NAT) |
| 814 | + @test isnan(xi) |
| 815 | + end |
| 816 | + |
| 817 | + # Changing unit on NaT remains NaT |
| 818 | + nat_td = NumpyDates.TimeDelta64("NaT", :s) |
| 819 | + z = NumpyDates.TimeDelta64(nat_td, :ns) |
| 820 | + @test isnan(z) |
| 821 | +end |
| 822 | + |
751 | 823 | @testitem "defaultunit" begin |
752 | 824 | using Dates |
753 | 825 | using PythonCall: NumpyDates |
|
0 commit comments