diff --git a/src/multifusion.jl b/src/multifusion.jl index 1672b37a..3988a0a8 100644 --- a/src/multifusion.jl +++ b/src/multifusion.jl @@ -37,7 +37,13 @@ Base.length(::SectorValues{IsingBimodule}) = length(all_isingbimod_objects) const IsingBimoduleProdIterator = SectorProductIterator{IsingBimodule} ⊗(a::IsingBimodule, b::IsingBimodule) = SectorProductIterator(a, b) -Base.IteratorSize(::Type{IsingBimoduleProdIterator}) = Base.SizeUnknown() +Base.IteratorSize(::Type{IsingBimoduleProdIterator}) = Base.HasLength() +function Base.length(x::IsingBimoduleProdIterator) + a, b = x.a, x.b + a.col == b.row || return 0 + a.row == b.col && a.row != a.col && return 2 + return 1 +end function Base.iterate(iter::IsingBimoduleProdIterator, state = 0) a, b = iter.a, iter.b diff --git a/test/sectors.jl b/test/sectors.jl index 2e850b14..383e2e5e 100644 --- a/test/sectors.jl +++ b/test/sectors.jl @@ -71,6 +71,10 @@ end @testsuite "Fusion and dimensions" I -> begin for a in smallset(I), b in smallset(I) + cs = a ⊗ b + if Base.IteratorSize(typeof(cs)) !== Base.SizeUnknown() + @test length(cs) == length(collect(cs)) + end can_fuse(a, b) || continue da = dim(a) db = dim(b)