Skip to content

Commit ac787e9

Browse files
add support for two-arg @maybe_inferred (#171)
Also adds some direct tests for `@maybe_inferred`. Co-authored-by: Lyndon White <oxinabox@ucc.asn.au>
1 parent 97a71b0 commit ac787e9

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "ChainRulesTestUtils"
22
uuid = "cdddcdb0-9152-4a09-a978-84456f9df70a"
3-
version = "0.7.5"
3+
version = "0.7.6"
44

55
[deps]
66
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"

src/testers.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -247,14 +247,14 @@ function _ensure_not_running_on_functor(f, name)
247247
end
248248

249249
"""
250-
@maybe_inferred f(...)
250+
@maybe_inferred [Type] f(...)
251251
252252
Like `@inferred`, but does not check the return type if tests are run as part of PkgEval or
253253
if the environment variable `CHAINRULES_TEST_INFERRED` is set to `false`.
254254
"""
255-
macro maybe_inferred(ex)
256-
inferred = Expr(:macrocall, GlobalRef(Test, Symbol("@inferred")), __source__, ex)
257-
return :(TEST_INFERRED[] ? $(esc(inferred)) : $(esc(ex)))
255+
macro maybe_inferred(ex...)
256+
inferred = Expr(:macrocall, GlobalRef(Test, Symbol("@inferred")), __source__, ex...)
257+
return :(TEST_INFERRED[] ? $(esc(inferred)) : $(esc(last(ex))))
258258
end
259259

260260
"""

test/testers.jl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,4 +546,22 @@ end
546546
test_frule(f_notimplemented, randn(), randn())
547547
test_rrule(f_notimplemented, randn(), randn())
548548
end
549+
550+
@testset "@maybe_inferred" begin
551+
f_noninferrable(x) = Ref{Real}(x)[]
552+
553+
@test @maybe_inferred(identity(1)) == 1
554+
@test errors("return type $Int does not match inferred return type Real") do
555+
@maybe_inferred f_noninferrable(1)
556+
end
557+
@test @maybe_inferred(Real, f_noninferrable(1)) == 1
558+
559+
ChainRulesTestUtils.TEST_INFERRED[] = false
560+
561+
@test @maybe_inferred(identity(1)) == 1
562+
@test @maybe_inferred(f_noninferrable(1)) == 1
563+
@test @maybe_inferred(Real, f_noninferrable(1)) == 1
564+
565+
ChainRulesTestUtils.TEST_INFERRED[] = true
566+
end
549567
end

0 commit comments

Comments
 (0)