Skip to content

Commit bc81898

Browse files
authored
Fix ExponentsIterator wth negative maximum degree (#322)
1 parent 252adfb commit bc81898

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

src/comparison.jl

+7-5
Original file line numberDiff line numberDiff line change
@@ -452,11 +452,11 @@ function Base.IteratorSize(::Type{<:ExponentsIterator{M,Int}}) where {M}
452452
end
453453

454454
function Base.length(it::ExponentsIterator{M,Int}) where {M}
455+
if it.maxdegree < it.mindegree
456+
return 0
457+
end
455458
len = binomial(nvariables(it) + it.maxdegree, nvariables(it))
456459
if it.mindegree > 0
457-
if it.maxdegree < it.mindegree
458-
return 0
459-
end
460460
len -= binomial(nvariables(it) + it.mindegree - 1, nvariables(it))
461461
end
462462
return len
@@ -553,9 +553,11 @@ end
553553

554554
function Base.iterate(it::ExponentsIterator{M}) where {M}
555555
z = _zero(it.object)
556+
if !isnothing(it.maxdegree) && it.maxdegree < it.mindegree
557+
return
558+
end
556559
if it.mindegree > 0
557-
if nvariables(it) == 0 ||
558-
(!isnothing(it.maxdegree) && it.maxdegree < it.mindegree)
560+
if nvariables(it) == 0
559561
return
560562
end
561563
z = _setindex!(z, it.mindegree, _last_lex_index(nvariables(it), M))

test/comparison.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ function test_exponents_iterator()
3232
@testset "nvariables = $nvars" for nvars in 0:3
3333
@testset "mindegree = $mindegree" for mindegree in 0:3
3434
@testset "maxdegree = $maxdegree" for maxdegree in
35-
vcat(nothing, 0:3)
35+
vcat(nothing, -1:3)
3636
for L in [LexOrder, InverseLexOrder]
3737
@testset "M = $M" for M in
3838
[L, Graded{L}, Graded{Reverse{L}}]

0 commit comments

Comments
 (0)