@@ -13,7 +13,8 @@ using SymmetrySectors:
1313 block_dimensions,
1414 quantum_dimension,
1515 trivial
16- using Test: @inferred , @test , @testset , @test_throws
16+ using Test: @test , @testset , @test_throws
17+ using TestExtras: @constinferred
1718
1819@testset " Simple SymmetrySector fusion rules" begin
1920 @testset " Z{2} fusion rules" begin
@@ -23,12 +24,12 @@ using Test: @inferred, @test, @testset, @test_throws
2324 @test z0 ⊗ z0 == z0
2425 @test z0 ⊗ z1 == z1
2526 @test z1 ⊗ z1 == z0
26- @test (@inferred z0 ⊗ z0) == z0 # no better way, see Julia PR 23426
27+ @test (@constinferred z0 ⊗ z0) == z0
2728
2829 q = TrivialSector ()
29- @test (@inferred q ⊗ q) == q
30- @test (@inferred q ⊗ z0) == z0
31- @test (@inferred z1 ⊗ q) == z1
30+ @test (@constinferred q ⊗ q) == q
31+ @test (@constinferred q ⊗ z0) == z0
32+ @test (@constinferred z1 ⊗ q) == z1
3233
3334 # using GradedUnitRanges interface
3435 @test space_isequal (fusion_product (z0, z0), gradedrange ([z0 => 1 ]))
@@ -38,7 +39,7 @@ using Test: @inferred, @test, @testset, @test_throws
3839 @test space_isequal (fusion_product (z0), gradedrange ([z0 => 1 ]))
3940 @test space_isequal (fusion_product (z0, z0, z0), gradedrange ([z0 => 1 ]))
4041 @test space_isequal (fusion_product (z0, z0, z0, z0), gradedrange ([z0 => 1 ]))
41- @test (@inferred block_dimensions (gradedrange ([z1 => 1 ]))) == [1 ]
42+ @test (@constinferred block_dimensions (gradedrange ([z1 => 1 ]))) == [1 ]
4243 end
4344 @testset " U(1) fusion rules" begin
4445 q1 = U1 (1 )
@@ -48,7 +49,7 @@ using Test: @inferred, @test, @testset, @test_throws
4849 @test q1 ⊗ q1 == U1 (2 )
4950 @test q1 ⊗ q2 == U1 (3 )
5051 @test q2 ⊗ q1 == U1 (3 )
51- @test (@inferred q1 ⊗ q2) == q3 # no better way, see Julia PR 23426
52+ @test (@constinferred q1 ⊗ q2) == q3
5253 end
5354
5455 @testset " O2 fusion rules" begin
@@ -58,23 +59,25 @@ using Test: @inferred, @test, @testset, @test_throws
5859 s1 = O2 (1 )
5960
6061 q = TrivialSector ()
61- @test space_isequal ((@inferred s0e ⊗ q), gradedrange ([s0e => 1 ]))
62- @test space_isequal ((@inferred q ⊗ s0o), gradedrange ([s0o => 1 ]))
63-
64- @test space_isequal ((@inferred s0e ⊗ s0e), gradedrange ([s0e => 1 ]))
65- @test space_isequal ((@inferred s0o ⊗ s0e), gradedrange ([s0o => 1 ]))
66- @test space_isequal ((@inferred s0o ⊗ s0e), gradedrange ([s0o => 1 ]))
67- @test space_isequal ((@inferred s0o ⊗ s0o), gradedrange ([s0e => 1 ]))
68-
69- @test space_isequal ((@inferred s0e ⊗ s12), gradedrange ([s12 => 1 ]))
70- @test space_isequal ((@inferred s0o ⊗ s12), gradedrange ([s12 => 1 ]))
71- @test space_isequal ((@inferred s12 ⊗ s0e), gradedrange ([s12 => 1 ]))
72- @test space_isequal ((@inferred s12 ⊗ s0o), gradedrange ([s12 => 1 ]))
73- @test space_isequal ((@inferred s12 ⊗ s1), gradedrange ([s12 => 1 , O2 (3 // 2 ) => 1 ]))
74- @test space_isequal ((@inferred s12 ⊗ s12), gradedrange ([s0o => 1 , s0e => 1 , s1 => 1 ]))
75-
76- @test (@inferred quantum_dimension (s0o ⊗ s1)) == 2
77- @test (@inferred block_dimensions (s0o ⊗ s1)) == [2 ]
62+ @test space_isequal ((@constinferred s0e ⊗ q), gradedrange ([s0e => 1 ]))
63+ @test space_isequal ((@constinferred q ⊗ s0o), gradedrange ([s0o => 1 ]))
64+
65+ @test space_isequal ((@constinferred s0e ⊗ s0e), gradedrange ([s0e => 1 ]))
66+ @test space_isequal ((@constinferred s0o ⊗ s0e), gradedrange ([s0o => 1 ]))
67+ @test space_isequal ((@constinferred s0o ⊗ s0e), gradedrange ([s0o => 1 ]))
68+ @test space_isequal ((@constinferred s0o ⊗ s0o), gradedrange ([s0e => 1 ]))
69+
70+ @test space_isequal ((@constinferred s0e ⊗ s12), gradedrange ([s12 => 1 ]))
71+ @test space_isequal ((@constinferred s0o ⊗ s12), gradedrange ([s12 => 1 ]))
72+ @test space_isequal ((@constinferred s12 ⊗ s0e), gradedrange ([s12 => 1 ]))
73+ @test space_isequal ((@constinferred s12 ⊗ s0o), gradedrange ([s12 => 1 ]))
74+ @test space_isequal ((@constinferred s12 ⊗ s1), gradedrange ([s12 => 1 , O2 (3 // 2 ) => 1 ]))
75+ @test space_isequal (
76+ (@constinferred s12 ⊗ s12), gradedrange ([s0o => 1 , s0e => 1 , s1 => 1 ])
77+ )
78+
79+ @test (@constinferred quantum_dimension (s0o ⊗ s1)) == 2
80+ @test (@constinferred block_dimensions (s0o ⊗ s1)) == [2 ]
7881 end
7982
8083 @testset " SU2 fusion rules" begin
@@ -88,9 +91,9 @@ using Test: @inferred, @test, @testset, @test_throws
8891 @test space_isequal (j2 ⊗ j2, gradedrange ([j1 => 1 , j3 => 1 ]))
8992 @test space_isequal (j2 ⊗ j3, gradedrange ([j2 => 1 , j4 => 1 ]))
9093 @test space_isequal (j3 ⊗ j3, gradedrange ([j1 => 1 , j3 => 1 , j5 => 1 ]))
91- @test space_isequal ((@inferred j1 ⊗ j2), gradedrange ([j2 => 1 ]))
92- @test (@inferred quantum_dimension (j1 ⊗ j2)) == 2
93- @test (@inferred block_dimensions (j1 ⊗ j2)) == [2 ]
94+ @test space_isequal ((@constinferred j1 ⊗ j2), gradedrange ([j2 => 1 ]))
95+ @test (@constinferred quantum_dimension (j1 ⊗ j2)) == 2
96+ @test (@constinferred block_dimensions (j1 ⊗ j2)) == [2 ]
9497
9598 @test space_isequal (fusion_product (j2), gradedrange ([j2 => 1 ]))
9699 @test space_isequal (fusion_product (j2, j1), gradedrange ([j2 => 1 ]))
@@ -104,8 +107,8 @@ using Test: @inferred, @test, @testset, @test_throws
104107 @test space_isequal (ı ⊗ ı, gradedrange ([ı => 1 ]))
105108 @test space_isequal (ı ⊗ τ, gradedrange ([τ => 1 ]))
106109 @test space_isequal (τ ⊗ ı, gradedrange ([τ => 1 ]))
107- @test space_isequal ((@inferred τ ⊗ τ), gradedrange ([ı => 1 , τ => 1 ]))
108- @test (@inferred quantum_dimension (gradedrange ([ı => 1 , ı => 1 ]))) == 2.0
110+ @test space_isequal ((@constinferred τ ⊗ τ), gradedrange ([ı => 1 , τ => 1 ]))
111+ @test (@constinferred quantum_dimension (gradedrange ([ı => 1 , ı => 1 ]))) == 2.0
109112 end
110113
111114 @testset " Ising fusion rules" begin
@@ -122,8 +125,8 @@ using Test: @inferred, @test, @testset, @test_throws
122125 @test space_isequal (σ ⊗ ψ, gradedrange ([σ => 1 ]))
123126 @test space_isequal (ψ ⊗ σ, gradedrange ([σ => 1 ]))
124127 @test space_isequal (ψ ⊗ ψ, gradedrange ([ı => 1 ]))
125- @test space_isequal ((@inferred ψ ⊗ ψ), gradedrange ([ı => 1 ]))
126- @test (@inferred quantum_dimension (σ ⊗ σ)) == 2.0
128+ @test space_isequal ((@constinferred ψ ⊗ ψ), gradedrange ([ı => 1 ]))
129+ @test (@constinferred quantum_dimension (σ ⊗ σ)) == 2.0
127130 end
128131end
129132@testset " Gradedrange fusion rules" begin
139142 g2 = gradedrange ([U1 (- 2 ) => 2 , U1 (0 ) => 1 , U1 (1 ) => 2 ])
140143
141144 @test space_isequal (flip (dual (g1)), gradedrange ([U1 (1 ) => 1 , U1 (0 ) => 1 , U1 (- 1 ) => 2 ]))
142- @test (@inferred block_dimensions (g1)) == [1 , 1 , 2 ]
145+ @test (@constinferred block_dimensions (g1)) == [1 , 1 , 2 ]
143146
144147 gt = gradedrange ([
145148 U1 (- 3 ) => 2 ,
155158 gf = gradedrange ([
156159 U1 (- 3 ) => 2 , U1 (- 2 ) => 2 , U1 (- 1 ) => 5 , U1 (0 ) => 3 , U1 (1 ) => 4 , U1 (2 ) => 4
157160 ])
158- @test space_isequal ((@inferred tensor_product (g1, g2)), gt)
159- @test space_isequal ((@inferred fusion_product (g1, g2)), gf)
161+ @test space_isequal ((@constinferred tensor_product (g1, g2)), gt)
162+ @test space_isequal ((@constinferred fusion_product (g1, g2)), gf)
160163
161164 gtd1 = gradedrange ([
162165 U1 (- 1 ) => 2 ,
172175 gfd1 = gradedrange ([
173176 U1 (- 3 ) => 4 , U1 (- 2 ) => 2 , U1 (- 1 ) => 4 , U1 (0 ) => 5 , U1 (1 ) => 3 , U1 (2 ) => 2
174177 ])
175- @test space_isequal ((@inferred tensor_product (dual (g1), g2)), gtd1)
176- @test space_isequal ((@inferred fusion_product (dual (g1), g2)), gfd1)
178+ @test space_isequal ((@constinferred tensor_product (dual (g1), g2)), gtd1)
179+ @test space_isequal ((@constinferred fusion_product (dual (g1), g2)), gfd1)
177180
178181 gtd2 = gradedrange ([
179182 U1 (1 ) => 2 ,
189192 gfd2 = gradedrange ([
190193 U1 (- 2 ) => 2 , U1 (- 1 ) => 3 , U1 (0 ) => 5 , U1 (1 ) => 4 , U1 (2 ) => 2 , U1 (3 ) => 4
191194 ])
192- @test space_isequal ((@inferred tensor_product (g1, dual (g2))), gtd2)
193- @test space_isequal ((@inferred fusion_product (g1, dual (g2))), gfd2)
195+ @test space_isequal ((@constinferred tensor_product (g1, dual (g2))), gtd2)
196+ @test space_isequal ((@constinferred fusion_product (g1, dual (g2))), gfd2)
194197
195198 gtd = gradedrange ([
196199 U1 (3 ) => 2 ,
206209 gfd = gradedrange ([
207210 U1 (- 2 ) => 4 , U1 (- 1 ) => 4 , U1 (0 ) => 3 , U1 (1 ) => 5 , U1 (2 ) => 2 , U1 (3 ) => 2
208211 ])
209- @test space_isequal ((@inferred tensor_product (dual (g1), dual (g2))), gtd)
210- @test space_isequal ((@inferred fusion_product (dual (g1), dual (g2))), gfd)
212+ @test space_isequal ((@constinferred tensor_product (dual (g1), dual (g2))), gtd)
213+ @test space_isequal ((@constinferred fusion_product (dual (g1), dual (g2))), gfd)
211214
212215 # test different (non-product) sectors cannot be fused
213216 @test_throws MethodError fusion_product (gradedrange ([Z {2} (0 ) => 1 ]), g1)
@@ -235,10 +238,10 @@ end
235238
236239 @test space_isequal (dual (flip (g3)), g3) # trivial for SU(2)
237240 @test space_isequal (
238- (@inferred fusion_product (g3, g4)),
241+ (@constinferred fusion_product (g3, g4)),
239242 gradedrange ([SU2 (0 ) => 4 , SU2 (1 // 2 ) => 6 , SU2 (1 ) => 6 , SU2 (3 // 2 ) => 5 , SU2 (2 ) => 2 ]),
240243 )
241- @test (@inferred block_dimensions (g3)) == [1 , 4 , 3 ]
244+ @test (@constinferred block_dimensions (g3)) == [1 , 4 , 3 ]
242245
243246 # test dual on non self-conjugate non-abelian representations
244247 s1 = SU {3} ((0 , 0 ))
@@ -268,13 +271,13 @@ end
268271 @testset " Mixed GradedUnitRange - Sector fusion rules" begin
269272 g1 = gradedrange ([U1 (1 ) => 1 , U1 (2 ) => 2 ])
270273 g2 = gradedrange ([U1 (2 ) => 1 , U1 (3 ) => 2 ])
271- @test space_isequal ((@inferred fusion_product (g1, U1 (1 ))), g2)
272- @test space_isequal ((@inferred fusion_product (U1 (1 ), g1)), g2)
274+ @test space_isequal ((@constinferred fusion_product (g1, U1 (1 ))), g2)
275+ @test space_isequal ((@constinferred fusion_product (U1 (1 ), g1)), g2)
273276
274277 g3 = gradedrange ([SU2 (0 ) => 1 , SU2 (1 // 2 ) => 2 ])
275278 g4 = gradedrange ([SU2 (0 ) => 2 , SU2 (1 // 2 ) => 1 , SU2 (1 ) => 2 ])
276- @test space_isequal ((@inferred fusion_product (g3, SU2 (1 // 2 ))), g4)
277- @test space_isequal ((@inferred fusion_product (SU2 (1 // 2 ), g3)), g4)
279+ @test space_isequal ((@constinferred fusion_product (g3, SU2 (1 // 2 ))), g4)
280+ @test space_isequal ((@constinferred fusion_product (SU2 (1 // 2 ), g3)), g4)
278281
279282 # test different simple sectors cannot be fused
280283 @test_throws MethodError Z {2} (0 ) ⊗ U1 (1 )
0 commit comments