@@ -17,6 +17,7 @@ using NDTensors.GradedAxes:
1717 AbstractGradedUnitRange,
1818 GradedAxes,
1919 GradedUnitRangeDual,
20+ LabelledUnitRangeDual,
2021 OneToOne,
2122 blocklabels,
2223 blockmergesortperm,
@@ -27,7 +28,8 @@ using NDTensors.GradedAxes:
2728 gradedrange,
2829 isdual,
2930 nondual
30- using NDTensors. LabelledNumbers: LabelledInteger, label, labelled, labelled_isequal
31+ using NDTensors. LabelledNumbers:
32+ LabelledInteger, LabelledUnitRange, label, labelled, labelled_isequal, unlabel
3133using Test: @test , @test_broken , @testset
3234struct U1
3335 n:: Int
@@ -58,6 +60,24 @@ Base.isless(c1::U1, c2::U1) = c1.n < c2.n
5860 @test blockisequal (ad, a)
5961end
6062
63+ @testset " LabelledUnitRangeDual" begin
64+ la = labelled (1 : 2 , U1 (1 ))
65+ @test la isa LabelledUnitRange
66+ @test label (la) == U1 (1 )
67+ @test unlabel (la) == 1 : 2
68+ @test la == 1 : 2
69+ @test ! isdual (la)
70+
71+ lad = dual (la)
72+ @test lad isa LabelledUnitRangeDual
73+ @test label (lad) == U1 (- 1 )
74+ @test unlabel (lad) == 1 : 2
75+ @test lad == 1 : 2
76+ @test isdual (lad)
77+ @test nondual (lad) === la
78+ @test dual (lad) === la
79+ end
80+
6181@testset " GradedUnitRangeDual" begin
6282 for a in
6383 [gradedrange ([U1 (0 ) => 2 , U1 (1 ) => 3 ]), gradedrange ([U1 (0 ) => 2 , U1 (1 ) => 3 ])[1 : 5 ]]
126146
127147 @test isdual (ad[Block (1 )])
128148 @test isdual (ad[Block (1 )[1 : 1 ]])
149+ @test ad[Block (1 )] isa LabelledUnitRangeDual
150+ @test ad[Block (1 )[1 : 1 ]] isa LabelledUnitRangeDual
151+ @test label (ad[Block (2 )]) == U1 (- 1 )
152+ @test label (ad[Block (2 )[1 : 1 ]]) == U1 (- 1 )
153+
129154 I = mortar ([Block (2 )[1 : 1 ]])
130155 g = ad[I]
131156 @test length (g) == 1
0 commit comments