How should I write a @testset
to verify that a function modifies its argument?
For example, here is a function that is passed a vector (of Rationals) v
and a row index row
:
function divideBelow!(v, row)
f = v[row]
for i in row:length(v)
v[i]=v[i]//f
end
return v
end
Do I just write multiple lines? Like this:
@testset "DivideBelow Tests" begin
v = [3//1, 6//5]
divideBelow(v, 2)
@test v == [3//1, 1//1]
end
It is common to return the modified argument (like you do), so you could check that directly, eg
@test divideBelow!([3//1, 6//5]) == [3//1, 1//1]
However, if you explicitly want to check that v
was modified (instead of copied), you could make a copy and then compare, eg
w = copy(v)
do_something!(v)
@test w !== v
Copying v
would necessarily make it different than w
and so w!==v
would always be true. But I think I see what you mean. I could do something like this:
v = [1//1, 2//1, 3//1, 4//1]
w = do_something!(v)
@test w === v
I think Tamas meant @test w != v
1 Like
squirrel:
I could do something like this:
v = [1//1, 2//1, 3//1, 4//1]
w = do_something!(v)
@test w === v
This test will pass for do_nothing!(v)
too! (assuming the function returns its argument)
Yes, thanks for the correction.