# Testing function with "if @generated"?

**URL:** https://discourse.julialang.org/t/testing-function-with-if-generated/17823
**Category:** General Usage
**Created:** [November 21, 2018, 3:47pm UTC](https://discourse.julialang.org/t/testing-function-with-if-generated/17823 "2018-11-21T15:47:33Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![oschulz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oschulz/32/2998_2.png) [@oschulz](https://discourse.julialang.org/u/oschulz)
#### Post date: [November 21, 2018, 3:47pm UTC](https://discourse.julialang.org/t/testing-function-with-if-generated/17823/1 "2018-11-21T15:47:33Z")

</div>

How to I test both generated and non-generated implementation paths of a function that uses `if @generated`? I’m sure I saw something about it once, but I can’t find it again …

---

<div class="post-metadata">

### Author: ![Luapulu](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/luapulu/32/17669_2.png) [@Luapulu](https://discourse.julialang.org/u/Luapulu)
#### Post date: [November 11, 2020, 4:01pm UTC](https://discourse.julialang.org/t/testing-function-with-if-generated/17823/2 "2020-11-11T16:01:34Z")

</div>

Have you found an answer to this? I’d want to know the same thing.

---

<div class="post-metadata">

### Author: ![oschulz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oschulz/32/2998_2.png) [@oschulz](https://discourse.julialang.org/u/oschulz)
#### Post date: [November 11, 2020, 4:20pm UTC](https://discourse.julialang.org/t/testing-function-with-if-generated/17823/3 "2020-11-11T16:20:21Z")

</div>

No, no solution yet, it seems. ☹

---

<div class="post-metadata">

### Author: ![Luapulu](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/luapulu/32/17669_2.png) [@Luapulu](https://discourse.julialang.org/u/Luapulu)
#### Post date: [November 11, 2020, 4:27pm UTC](https://discourse.julialang.org/t/testing-function-with-if-generated/17823/4 "2020-11-11T16:27:03Z")

</div>

The language itself must have some testing of the `@generated` macro. According to git blame @jeff.bezanson wrote the `if @generated` functionality into the language. He might have some insight. In the mean time I’ll see if I can find some unit tests in base.

---

<div class="post-metadata">

### Author: ![Luapulu](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/luapulu/32/17669_2.png) [@Luapulu](https://discourse.julialang.org/u/Luapulu)
#### Post date: [November 11, 2020, 4:31pm UTC](https://discourse.julialang.org/t/testing-function-with-if-generated/17823/5 "2020-11-11T16:31:30Z")

</div>

Found it!

[https://github.com/JuliaLang/julia/blob/af3cd59e13c93fcb3e3788a79b0168127473d18a/test/staged.jl#L265-L289](https://github.com/JuliaLang/julia/blob/af3cd59e13c93fcb3e3788a79b0168127473d18a/test/staged.jl#L265-L289)

---

<div class="post-metadata">

### Author: ![cstjean](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cstjean/32/1444_2.png) [@cstjean](https://discourse.julialang.org/u/cstjean)
#### Post date: [November 11, 2020, 4:44pm UTC](https://discourse.julialang.org/t/testing-function-with-if-generated/17823/6 "2020-11-11T16:44:03Z")

</div>

Related: [https://github.com/JuliaLang/julia/issues/25707](https://github.com/JuliaLang/julia/issues/25707)

---

<div class="post-metadata">

### Author: ![Luapulu](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/luapulu/32/17669_2.png) [@Luapulu](https://discourse.julialang.org/u/Luapulu)
#### Post date: [November 11, 2020, 4:52pm UTC](https://discourse.julialang.org/t/testing-function-with-if-generated/17823/7 "2020-11-11T16:52:39Z")

</div>

I also opened [https://github.com/JuliaLang/julia/issues/38394](https://github.com/JuliaLang/julia/issues/38394)

---

<div class="post-metadata">

### Author: ![simeonschaub](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simeonschaub/32/216566_2.png) [@simeonschaub](https://discourse.julialang.org/u/simeonschaub)
#### Post date: [November 11, 2020, 8:14pm UTC](https://discourse.julialang.org/t/testing-function-with-if-generated/17823/8 "2020-11-11T20:14:39Z")

</div>

Here is my attempt at a solution:

```julia
julia> f(x, y) = @generated() ? :x : y
f (generic function with 1 method)

julia> function _invoke(f, x...; generated)
           ci = code_lowered(f, Core.Typeof(x); generated)[1]
           g = @eval @generated function g($([gensym() for _ in x]...))
               return $(QuoteNode(ci))
           end
           Base.invokelatest(g, x...)
       end
_invoke (generic function with 1 method)

julia> _invoke(f, 1, 2; generated=true)
1

julia> _invoke(f, 1, 2; generated=false)
2

```

---

<div class="post-metadata">

### Author: ![oxinabox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oxinabox/32/206603_2.png) [@oxinabox](https://discourse.julialang.org/u/oxinabox)
#### Post date: [November 11, 2020, 8:57pm UTC](https://discourse.julialang.org/t/testing-function-with-if-generated/17823/9 "2020-11-11T20:57:26Z")

</div>

I asked this on stack overflow a while back.  
Did not get a great answer

[https://stackoverflow.com/questions/58612962/how-do-i-test-both-sides-of-a-if-generated](https://stackoverflow.com/questions/58612962/how-do-i-test-both-sides-of-a-if-generated)

---

<div class="post-metadata">

### Author: ![Luapulu](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/luapulu/32/17669_2.png) [@Luapulu](https://discourse.julialang.org/u/Luapulu)
#### Post date: [November 12, 2020, 12:10pm UTC](https://discourse.julialang.org/t/testing-function-with-if-generated/17823/10 "2020-11-12T12:10:09Z")

</div>

This answer seems a bit cleaner to me

[https://stackoverflow.com/a/58613544/12884283](https://stackoverflow.com/a/58613544/12884283)

---

<div class="post-metadata">

### Author: ![Luapulu](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/luapulu/32/17669_2.png) [@Luapulu](https://discourse.julialang.org/u/Luapulu)
#### Post date: [November 20, 2020, 12:51pm UTC](https://discourse.julialang.org/t/testing-function-with-if-generated/17823/11 "2020-11-20T12:51:09Z")

</div>

Just found this: [https://github.com/JuliaData/Tables.jl/issues/144#issue-562125911](https://github.com/JuliaData/Tables.jl/issues/144#issue-562125911). Haven’t looked into the details though.
