-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How to get code coverage for @traitfn-wrapped functions? #28
Comments
This would need something like https://github.com/bramtayl/NumberedLines.jl. I hope to do this at some point but it's not high on my priority list. However, @bramtayl seems keen to see his package used: https://github.com/bramtayl/NumberedLines.jl/issues/1 . So maybe he'd work with you on a PR... |
Hmm. I'm not sure I'm seeing what the issue is? It looks to me like the line number info is in the function body (fbody), which gets passed through untouched? |
Sorry, I got confused with my packages: this package has line number information (thanks to @timholy, see here) but Parameters.jl is lacking it. So, I'm not sure why coverage is not reported correctly but it seems a Julia-0.5 issue, as below tests show. @sbromberger can you check whether it works on 0.6? Running: # julia --code-coverage coverage-test.jl
using SimpleTraits, Base.Test
@traitdef Tr{X}
@traitimpl Tr{Int}
foo() = 1
@traitfn foo(x::::Tr) = 2
@traitfn foo(x::::(!Tr)) = 3
@test foo()==1
@test foo(1)==2
@test foo(1.0)==3 Julia 0.5 produces no - # julia --code-coverage coverage-test.jl
- using SimpleTraits, Base.Test
- @traitdef Tr{X}
- @traitimpl Tr{Int}
-
1 foo() = 1
2 @traitfn foo(x::::Tr) = 2
2 @traitfn foo(x::::(!Tr)) = 3
-
- @test foo()==1
- @test foo(1)==2
- @test foo(1.0)==3 Not 100% right as it over-reports at least the second line. In fact, running a slightly different script shows the problem a bit better: - # julia --code-coverage coverage-test.jl
- using SimpleTraits, Base.Test
- @traitdef Tr{X}
- @traitimpl Tr{Int}
-
1 foo() = 1
2 @traitfn foo(x::::Tr) = 2
- @traitfn function foo(x::::(!Tr))
4 println("here") # over-reporting
2 println("here") # over-reporting
2 println("here") # correct
2 if x>0
1 return 3
- else
1 return -3
- end
- end
-
-
- @test foo()==1
- @test foo(1)==2
- @test foo(1.0)==3
- @test foo(-1.0)==-3 |
@sbromberger did you check whether Julia-0.6 gives better coverage results? |
@mauro3 I won't be able to do that for a while since we haven't migrated this branch to have compatibility with 0.6. |
Ok. I don't think there is anything for me to do here (and I certainly wouldn't know what). So, I'll close this. But if you figure something out, a PR is welcome. |
I'm using
@traitfn
like this:I can get code coverage for
#1
, but even when I do real tests onfoo
(#2
and#3
), codecov complains that the method isn't tested.Is there a recommended way to do this? (Also: is there a better way to associate a docstring other than creating a dummy non-traited function?)
The text was updated successfully, but these errors were encountered: