diff --git a/src/lsr1.jl b/src/lsr1.jl index 60895d6f..7445cb84 100644 --- a/src/lsr1.jl +++ b/src/lsr1.jl @@ -161,12 +161,12 @@ function push!(op::LSR1Operator, s::AbstractVector, y::AbstractVector) for i = 1:(data.mem) k = mod(data.insert + i - 2, data.mem) + 1 if data.ys[k] != 0 - data.a[k] .= data.y[k] - data.s[k] / data.scaling_factor # = y - B₀ * s + @. data.a[k] = data.y[k] - data.s[k] / data.scaling_factor # = y - B₀ * s for j = 1:(i - 1) l = mod(data.insert + j - 2, data.mem) + 1 if data.ys[l] != 0 as = dot(data.a[l], data.s[k]) / data.as[l] - data.a[k] .-= as * data.a[l] + @. data.a[k] -= as * data.a[l] end end data.as[k] = dot(data.a[k], data.s[k]) diff --git a/test/test_lsr1.jl b/test/test_lsr1.jl index 2fb9a93a..1698d542 100644 --- a/test/test_lsr1.jl +++ b/test/test_lsr1.jl @@ -83,11 +83,13 @@ function test_lsr1() n = 100 mem = 20 B = LSR1Operator(n, mem = mem) + nallocs = 0 for _ = 1:2:n s = rand(n) y = rand(n) - push!(B, s, y) + nallocs += @allocated push!(B, s, y) end + @test nallocs == 0 x = rand(n) res = similar(x) mul!(res, B, x) # warmup