To be able to edit code and run cells, you need to run the notebook yourself. Where would you like to run the notebook?

This notebook takes about 30 seconds to run.

In the cloud (experimental)

Binder is a free, open source service that runs scientific notebooks in the cloud! It will take a while, usually 2-7 minutes to get a session.

On your computer

(Recommended if you want to store your changes.)

  1. Copy the notebook URL:
  2. Run Pluto

    (Also see: How to install Julia and Pluto)

  3. Paste URL in the Open box

Frontmatter

If you are publishing this notebook on the web, you can set the parameters below to provide HTML metadata. This is useful for search engines and social media.

Author 1

PlutoTest.jl

👀 Reading hidden code
163 μs

This notebook introduces visual testing:

👀 Reading hidden code
218 μs
sqrt($(Main.workspace#5.Computed(20 - 11))) == 3 $(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(20 - 11))))) == 3 $(Main.workspace#5.Computed($(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(20 - 11))))) == 3))
👀 Reading hidden code
@test sqrt(20-11) == 3
6.7 ms
iseven(123 + $(Main.workspace#5.Computed(7 ^ 3))) iseven($(Main.workspace#5.Computed(123 + $(Main.workspace#5.Computed(7 ^ 3))))) $(Main.workspace#5.Computed(iseven($(Main.workspace#5.Computed(123 + $(Main.workspace#5.Computed(7 ^ 3)))))))
👀 Reading hidden code
@test iseven(123 + 7^3)
13.2 ms
$(Main.workspace#5.Computed(4 + 4)) ∈ [1:7...] $(Main.workspace#5.Computed(4 + 4)) ∈ $(Main.workspace#5.Computed([1:7...])) $(Main.workspace#5.Computed($(Main.workspace#5.Computed(4 + 4)) ∈ $(Main.workspace#5.Computed([1:7...]))))
👀 Reading hidden code
@test 4+4 ∈ [1:7...]
293 μs
👀 Reading hidden code
59.7 μs
👀 Reading hidden code
58.7 μs
is_good_boy(first($(Main.workspace#5.Computed(friends)))) is_good_boy($(Main.workspace#5.Computed(first($(Main.workspace#5.Computed(friends)))))) $(Main.workspace#5.Computed(is_good_boy($(Main.workspace#5.Computed(first($(Main.workspace#5.Computed(friends))))))))
👀 Reading hidden code
251 μs
👀 Reading hidden code
friends = Any[Hannes, Floep];
15.1 μs
👀 Reading hidden code
Hannes = let
url = "https://user-images.githubusercontent.com/6933510/116753174-fa40ab80-aa06-11eb-94d7-88f4171970b2.jpeg"
data = read(download(url))
PlutoUI.Show(MIME"image/jpg"(), data)
end;
148 ms
👀 Reading hidden code
Floep = let
url = "https://user-images.githubusercontent.com/6933510/116753861-142ebe00-aa08-11eb-8ce8-684af1098935.jpeg"
data = read(download(url))
PlutoUI.Show(MIME"image/jpg"(), data)
end;
33.0 ms
is_good_boy (generic function with 1 method)
is_good_boy(x) = true
👀 Reading hidden code
340 μs

Tests have time-travel functionality built in! Click on the tests above.

👀 Reading hidden code
254 μs

Time travel

👀 Reading hidden code
164 μs

This notebook contains visual debugging:

👀 Reading hidden code
213 μs
begin $(Main.workspace#5.Computed(1 + 2)) + (7 - 6) plot(2000 .+ 30 .* rand(2 + 2)) 4 + 5 sqrt(sqrt(sqrt(5))) md"# Wow"end begin $(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)) plot(2000 .+ 30 .* rand(2 + 2)) 4 + 5 sqrt(sqrt(sqrt(5))) md"# Wow"end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot(2000 .+ 30 .* rand(2 + 2)) 4 + 5 sqrt(sqrt(sqrt(5))) md"# Wow"end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot(2000 .+ 30 .* rand($(Main.workspace#5.Computed(2 + 2)))) 4 + 5 sqrt(sqrt(sqrt(5))) md"# Wow"end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot(2000 .+ 30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))) 4 + 5 sqrt(sqrt(sqrt(5))) md"# Wow"end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))) 4 + 5 sqrt(sqrt(sqrt(5))) md"# Wow"end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))) 4 + 5 sqrt(sqrt(sqrt(5))) md"# Wow"end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) 4 + 5 sqrt(sqrt(sqrt(5))) md"# Wow"end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) sqrt(sqrt(sqrt(5))) md"# Wow"end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) sqrt(sqrt($(Main.workspace#5.Computed(sqrt(5))))) md"# Wow"end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) sqrt($(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt(5))))))) md"# Wow"end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) $(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt(5))))))))) md"# Wow"end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) $(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt(5))))))))) $(Main.workspace#5.Computed(md"# Wow"))end $(Main.workspace#5.Computed(begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) $(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt(5))))))))) $(Main.workspace#5.Computed(md"# Wow")) end))
@visual_debug begin
(1+2) + (7-6)
plot(2000 .+ 30 .* rand(2+2))
4+5
sqrt(sqrt(sqrt(5)))
md"# Wow"
end
👀 Reading hidden code
13.9 ms

(You need Pluto#main to run this notebook)

👀 Reading hidden code
191 μs
TableOfContents()
👀 Reading hidden code
12.4 μs
using HypertextLiteral
👀 Reading hidden code
4.5 ms
using PlutoUI
👀 Reading hidden code
175 ms
import Test
👀 Reading hidden code
152 μs
@test_deprecated (macro with 1 method)
begin
export test_nowarn, test_warn, test_logs, test_skip, test_broken, test_throws, test_deprecated
var"@test_warn" = Test.var"@test_warn"
var"@test_nowarn" = Test.var"@test_nowarn"
var"@test_logs" = Test.var"@test_logs"
var"@test_skip" = Test.var"@test_skip"
var"@test_broken" = Test.var"@test_broken"
var"@test_throws" = Test.var"@test_throws"
var"@test_deprecated" = Test.var"@test_deprecated"
end
👀 Reading hidden code
423 μs

Type definitions

👀 Reading hidden code
160 μs
abstract type TestResult end
👀 Reading hidden code
349 μs
abstract type Fail <: TestResult end
👀 Reading hidden code
326 μs
abstract type Pass <: TestResult end
👀 Reading hidden code
316 μs
Any
const Code = Any
👀 Reading hidden code
106 μs
# struct Correct <: Pass
# expr::Code
# end
👀 Reading hidden code
8.8 μs
struct CorrectCall <: Pass
expr::Code
steps::Vector
end
👀 Reading hidden code
1.3 ms
# struct Error <: Fail
# expr::Code
# error
# end
👀 Reading hidden code
9.3 μs
# struct Wrong <: Fail
# expr::Code
# step
# end
👀 Reading hidden code
9.7 μs
struct WrongCall <: Fail
expr::Code
steps::Vector
end
👀 Reading hidden code
1.6 ms

Test macro

👀 Reading hidden code
177 μs
map(1:10) do i
@test 1 + $i
end
👀 Reading hidden code
25.4 ms
map(1:10) do i
@test 1 + i
end
👀 Reading hidden code
22.7 ms
@eval_step_by_step 1 + [2,3]
👀 Reading hidden code
106 ms
test (generic function with 1 method)
function test(expr, extra_args...; __module__)
step_by_step
Test.test_expr!("", expr, extra_args...)
quote
expr_raw = $(QuoteNode(expr))
try
# steps = @eval_step_by_step($(expr))
steps = $(step_by_step(expr; __module__=__module__))
# arg_results = [$((expr.args[2:end] .|> esc)...)]
# result = $(esc(:eval))(Expr(:call, $(expr.args[1] |> QuoteNode), arg_results...))
result = expand_computed(last(steps))
if result === true
CorrectCall(expr_raw, steps)
# elseif result === false
# WrongCall(expr_raw, steps)
else
WrongCall(expr_raw, steps)
end
catch e
rethrow(e)
# Error(expr_raw, e)
end
end
end
👀 Reading hidden code
2.0 ms
👀 Reading hidden code
9.5 μs
begin
    var"#692#expr_raw" = $(QuoteNode(:(x == [1, 2 + i])))
    try
        var"#693#steps" = Expr[:($(Expr(:$, :(Main.workspace#5.Computed(x)))) == [1, 2 + i]), :($(Expr(:$, :(Main.workspace#5.Computed(x)))) == $(Expr(:$, :(Main.workspace#5.Computed([1, 2 + i]))))), :($(Expr(:$, :(Main.workspace#5.Computed($(Expr(:$, :(Main.workspace#5.Computed(x)))) == $(Expr(:$, :(Main.workspace#5.Computed([1, 2 + i])))))))))]
        var"#694#result" = Main.workspace#9.expand_computed(Main.workspace#9.last(var"#693#steps"))
        if var"#694#result" === true
            Main.workspace#9.CorrectCall(var"#692#expr_raw", var"#693#steps")
        else
            Main.workspace#9.WrongCall(var"#692#expr_raw", var"#693#steps")
        end
    catch var"#697#e"
        Main.workspace#9.rethrow(var"#697#e")
    end
end
var"@test"; macroexpand(@__MODULE__, :(@test x == [1,2+i]); recursive=false) |> prettycolors
👀 Reading hidden code
36.8 ms
# e = :(x == [1,2+2])
👀 Reading hidden code
9.2 μs
x = [1,3]
👀 Reading hidden code
12.0 μs
$(Main.workspace#5.Computed(missing)) == 2 $(Main.workspace#5.Computed($(Main.workspace#5.Computed(missing)) == 2))
@test missing == 2
👀 Reading hidden code
232 μs
$(Main.workspace#5.Computed(2 + 2)) == 2 + 2 $(Main.workspace#5.Computed(2 + 2)) == $(Main.workspace#5.Computed(2 + 2)) $(Main.workspace#5.Computed($(Main.workspace#5.Computed(2 + 2)) == $(Main.workspace#5.Computed(2 + 2))))
@test 2+2 == 2+2
👀 Reading hidden code
266 μs
$(Main.workspace#5.Computed(x)) == [1, 2 + 2] $(Main.workspace#5.Computed(x)) == $(Main.workspace#5.Computed([1, 2 + 2])) $(Main.workspace#5.Computed($(Main.workspace#5.Computed(x)) == $(Main.workspace#5.Computed([1, 2 + 2]))))
👀 Reading hidden code
25.9 ms
$(Main.workspace#5.Computed(rand(50))) == [rand(50), 2] $(Main.workspace#5.Computed(rand(50))) == $(Main.workspace#5.Computed([rand(50), 2])) $(Main.workspace#5.Computed($(Main.workspace#5.Computed(rand(50))) == $(Main.workspace#5.Computed([rand(50), 2]))))
@test rand(50) == [rand(50),2]
👀 Reading hidden code
20.8 ms
always_false(rand($(Main.workspace#5.Computed(howmuch))), rand(howmuch), 123) always_false($(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(howmuch))))), rand(howmuch), 123) always_false($(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(howmuch))))), rand($(Main.workspace#5.Computed(howmuch))), 123) always_false($(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(howmuch))))), $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(howmuch))))), 123) $(Main.workspace#5.Computed(always_false($(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(howmuch))))), $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(howmuch))))), 123)))
@test always_false(rand(howmuch), rand(howmuch),123)
👀 Reading hidden code
273 μs
@bind howmuch Slider(0:100)
👀 Reading hidden code
250 ms
!(always_false($(Main.workspace#5.Computed(rand(2))), rand(2), 123)) !(always_false($(Main.workspace#5.Computed(rand(2))), $(Main.workspace#5.Computed(rand(2))), 123)) !($(Main.workspace#5.Computed(always_false($(Main.workspace#5.Computed(rand(2))), $(Main.workspace#5.Computed(rand(2))), 123)))) $(Main.workspace#5.Computed(!($(Main.workspace#5.Computed(always_false($(Main.workspace#5.Computed(rand(2))), $(Main.workspace#5.Computed(rand(2))), 123))))))
@test !always_false(rand(2), rand(2),123)
👀 Reading hidden code
278 μs
!(!(always_false(rand(2), rand(2), 123; r = 123)))
false
@test !!always_false(rand(2), rand(2),123; r=123)
👀 Reading hidden code
39.3 ms
always_false([1, 2, 3]...)
false
@test always_false([1,2,3]...)
👀 Reading hidden code
2.7 ms
always_false (generic function with 1 method)
always_false(args...; kwargs...) = false
👀 Reading hidden code
1.1 ms
isless($(Main.workspace#5.Computed(2 + 2)), 1) $(Main.workspace#5.Computed(isless($(Main.workspace#5.Computed(2 + 2)), 1)))
@test isless(2+2,1)
👀 Reading hidden code
246 μs
isless(1, $(Main.workspace#5.Computed(2 + 2))) $(Main.workspace#5.Computed(isless(1, $(Main.workspace#5.Computed(2 + 2)))))
@test isless(1,2+2)
👀 Reading hidden code
245 μs
@bind n Slider(1:10)
👀 Reading hidden code
635 μs
iseven($(Main.workspace#5.Computed(n)) ^ 2) iseven($(Main.workspace#5.Computed($(Main.workspace#5.Computed(n)) ^ 2))) $(Main.workspace#5.Computed(iseven($(Main.workspace#5.Computed($(Main.workspace#5.Computed(n)) ^ 2)))))
@test iseven(n^2)
👀 Reading hidden code
270 μs
@bind k Slider(0:15)
👀 Reading hidden code
582 μs
$(Main.workspace#5.Computed(4 + 4)) ∈ [1:k...] $(Main.workspace#5.Computed(4 + 4)) ∈ $(Main.workspace#5.Computed([1:k...])) $(Main.workspace#5.Computed($(Main.workspace#5.Computed(4 + 4)) ∈ $(Main.workspace#5.Computed([1:k...]))))
@test 4+4 ∈ [1:k...]
👀 Reading hidden code
279 μs
isempty((1:$(Main.workspace#5.Computed(k))) .^ 2) isempty($(Main.workspace#5.Computed(1:$(Main.workspace#5.Computed(k)))) .^ 2) isempty($(Main.workspace#5.Computed($(Main.workspace#5.Computed(1:$(Main.workspace#5.Computed(k)))) .^ 2))) $(Main.workspace#5.Computed(isempty($(Main.workspace#5.Computed($(Main.workspace#5.Computed(1:$(Main.workspace#5.Computed(k)))) .^ 2)))))
@test isempty((1:k) .^ 2)
👀 Reading hidden code
271 μs
map(1:10) do i
@test sqrt($i) < 3
end
👀 Reading hidden code
23.0 ms
map(1:10) do i
@test sqrt(i) < 0
end
👀 Reading hidden code
35.9 ms
isempty($(Main.workspace#5.Computed([1, sqrt(2)]))) $(Main.workspace#5.Computed(isempty($(Main.workspace#5.Computed([1, sqrt(2)])))))
@test isempty([1,sqrt(2)])
👀 Reading hidden code
263 μs
1 ∈ $(Main.workspace#5.Computed([sqrt(20), 5:9...])) $(Main.workspace#5.Computed(1 ∈ $(Main.workspace#5.Computed([sqrt(20), 5:9...]))))
👀 Reading hidden code
272 μs
1 ∈ $(Main.workspace#5.Computed(rand(60))) $(Main.workspace#5.Computed(1 ∈ $(Main.workspace#5.Computed(rand(60)))))
👀 Reading hidden code
247 μs
$(Main.workspace#5.Computed(rand(60))) ∋ 1 $(Main.workspace#5.Computed($(Main.workspace#5.Computed(rand(60))) ∋ 1))
👀 Reading hidden code
237 μs
html"""
<style>

pt-dot {
flex: 0 0 auto;
background: grey;
width: 1em;
height: 1em;
bottom: -.1em;
border-radius: 100%;
margin-right: .7em;
display: block;
position: relative;
cursor: pointer;
}

pt-dot.floating {
position: fixed;
z-index: 60;
display: none;
transition: transform linear 120ms;
}
.show-top-float > pt-dot.floating.top {
display: block;
}
.show-bottom-float > pt-dot.floating.bottom {
display: block;
}

pt-dot.floating.top {
top: 5px;
}
pt-dot.floating.bottom {
bottom: 5px;
}


.fail > pt-dot {
background: #f75d5d;

}
.pass > pt-dot {
background: #56a038;
}
.pass > pt-dot.floating {
opacity: 0;
pointer-events: none;
}


.pluto-test {
font-family: "JuliaMono", monospace;
font-size: 0.75rem;
padding: 4px;

min-height: 25px;
}


.pluto-test.pass {
color: rgba(0,0,0,.5);
}

.pluto-test.fail {
background: linear-gradient(90deg, #ff2e2e14, transparent);
border-radius: 7px;
}


.pluto-test>.arg_result {
flex: 0 0 auto;
}

.pluto-test>.arg_result>div,
.pluto-test>.arg_result>div>pluto-display>div {
display: inline-flex;
}


.pluto-test>.comma {
margin-right: .5em;
}

.pluto-test.call>code {
padding: 0px;
}

.pluto-test.call.infix-operator>div {
overflow-x: auto;
}

.pluto-test {
display: flex;
align-items: baseline;
}

.pluto-test.call.infix-operator>.fname {
margin: 0px .6em;
/*color: darkred;*/
}


/* expanding */


.pluto-test:not(.expanded) > p-frame-viewer > p-frame-controls {
display: none;
}

.pluto-test.expanded > p-frame-viewer {
max-width: 100%;
}
.pluto-test.expanded > p-frame-viewer > p-frames > slotted-code > line-like {
flex-wrap: wrap;
}
.pluto-test.expanded > p-frame-viewer > p-frames > slotted-code > line-like > pluto-display[mime="application/vnd.pluto.tree+object"] {
/*flex-basis: 100%;*/
}
"""
👀 Reading hidden code
114 μs
html"""
<style>
p-frame-viewer {
display: inline-flex;
flex-direction: column;
}
p-frames,
p-frame-controls {
display: inline-flex;
}
"""
👀 Reading hidden code
104 μs
always_false($(Main.workspace#5.Computed(rand(20))), rand(20), 123) always_false($(Main.workspace#5.Computed(rand(20))), $(Main.workspace#5.Computed(rand(20))), 123) $(Main.workspace#5.Computed(always_false($(Main.workspace#5.Computed(rand(20))), $(Main.workspace#5.Computed(rand(20))), 123)))
t = @test always_false(rand(20), rand(20),123)
👀 Reading hidden code
259 μs
begin $(Main.workspace#5.Computed(1 + 2)) - (3 + 4) falseend begin $(Main.workspace#5.Computed(1 + 2)) - $(Main.workspace#5.Computed(3 + 4)) falseend begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) - $(Main.workspace#5.Computed(3 + 4)))) falseend $(Main.workspace#5.Computed(begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) - $(Main.workspace#5.Computed(3 + 4)))) false end))
@test begin
(1+2) - (3+4)
false
end
👀 Reading hidden code
2.4 ms
$(Main.workspace#5.Computed(#= /home/runner/work/disorganised-mess/disorganised-mess/testing and debugging 3 no interpolate.jl#==#176f39f1-fa36-4ce1-86ba-76248848a834:1 =# @test(always_false(rand(3), rand(3), 123)))) isa Fail $(Main.workspace#5.Computed(#= /home/runner/work/disorganised-mess/disorganised-mess/testing and debugging 3 no interpolate.jl#==#176f39f1-fa36-4ce1-86ba-76248848a834:1 =# @test(always_false(rand(3), rand(3), 123)))) isa $(Main.workspace#5.Computed(Fail)) $(Main.workspace#5.Computed($(Main.workspace#5.Computed(#= /home/runner/work/disorganised-mess/disorganised-mess/testing and debugging 3 no interpolate.jl#==#176f39f1-fa36-4ce1-86ba-76248848a834:1 =# @test(always_false(rand(3), rand(3), 123)))) isa $(Main.workspace#5.Computed(Fail))))
@test (@test always_false(rand(3),rand(3),123)) isa Fail
👀 Reading hidden code
15.4 ms
always_false($(Main.workspace#5.Computed("asd" * "asd")), "asd", "asd" * " asd", "asd", "asd" * "asd", "asd", "asd" * "asd", "asd", "asd" * "asd", "asd", "asd" * "asd", "asd", "asd" * "asd", "asd") always_false($(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * " asd")), "asd", "asd" * "asd", "asd", "asd" * "asd", "asd", "asd" * "asd", "asd", "asd" * "asd", "asd", "asd" * "asd", "asd") always_false($(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * " asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", "asd" * "asd", "asd", "asd" * "asd", "asd", "asd" * "asd", "asd", "asd" * "asd", "asd") always_false($(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * " asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", "asd" * "asd", "asd", "asd" * "asd", "asd", "asd" * "asd", "asd") always_false($(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * " asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", "asd" * "asd", "asd", "asd" * "asd", "asd") always_false($(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * " asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", "asd" * "asd", "asd") always_false($(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * " asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd") $(Main.workspace#5.Computed(always_false($(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * " asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd", $(Main.workspace#5.Computed("asd" * "asd")), "asd")))
@test always_false("asd"*"asd","asd","asd"*" asd","asd","asd"*"asd","asd","asd"*"asd","asd","asd"*"asd","asd","asd"*"asd","asd","asd"*"asd","asd")
👀 Reading hidden code
16.4 ms
("asd"*"asd","asd","asd"*" asd","asd","asd"*"asd","asd","asd"*"asd","asd","asd"*"asd","asd","asd"*"asd","asd","asd"*"asd","asd")
👀 Reading hidden code
24.0 μs
# @test (@test t isa Pass) isa Pass
👀 Reading hidden code
8.8 μs
≈(π, 3.14, atol = 0.01, rtol = 1)
true
@test π ≈ 3.14 atol=0.01 rtol=1
👀 Reading hidden code
30.2 ms
begin
macro test(expr...)
test(expr...; __module__=__module__)
end
function Base.show(io::IO, m::MIME"text/html", call::Union{WrongCall,CorrectCall})

infix = if Meta.isexpr(call.expr, :call)
fname = call.expr.args[1]
Meta.isbinaryoperator(fname)
else
false
end
classes = [
"pluto-test",
"call",
(isa(call,CorrectCall) ? "correct" : "wrong"),
(isa(call,Pass) ? "pass" : "fail"),
infix ? "infix-operator" : "prefix-operator",
]
result = @htl("""
<div class=$(classes)>
<script>
const div = currentScript.parentElement
div.addEventListener("click", (e) => {
if(!div.classList.contains("expanded") || e.target.closest("pt-dot:not(.floating)") != null){
div.classList.toggle("expanded")
e.stopPropagation()
}
})
const throttled = (f, delay) => {
const waiting = { current: false }
return () => {
if (!waiting.current) {
f()
waiting.current = true
setTimeout(() => {
f()
waiting.current = false
}, delay)
}
}
}
const dot_top = div.querySelector("pt-dot.top")
const dot_bot = div.querySelector("pt-dot.bottom")

const intersect = (r) => {
const topdistance = r.top
const botdistance = window.visualViewport.height - r.bottom
const t = (x) => `translate(\${2*Math.sqrt(Math.max(0,-50-x))}px,0)`
dot_top.style.transform = t(topdistance)
dot_bot.style.transform = t(botdistance)

div.classList.toggle("show-top-float", topdistance < 4)
div.classList.toggle("show-bottom-float", botdistance < 4)
}
window.addEventListener("scroll", throttled(() => {
intersect(dot.getBoundingClientRect())
}, 100))

let observer = new IntersectionObserver((es) => {
const e = es[0]
intersect(e.boundingClientRect)
}, {
rootMargin: '-4px',
threshold: 1.0
});

const dot = div.querySelector("pt-dot")
observer.observe(dot)
invalidation.then(() => {
observer.unobserve(dot)
})
Array.from(div.querySelectorAll("pt-dot.floating")).forEach(e => {
e.addEventListener("click", () => dot.scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"}))
})
</script>
<pt-dot></pt-dot>
<pt-dot class="floating top"></pt-dot>
<pt-dot class="floating bottom"></pt-dot>
$(frames(display_slotted.( call.steps)))
</div>
""")
Base.show(io, m, result)
end
# function Base.show(io::IO, m::MIME"text/html", c::Correct)
# result = @htl("""
# <div class=$([
# "pluto-test", "pass", "correct",
# ])>
# <pt-dot></pt-dot>
# <span>$((string(remove_linenums(c.expr))))</span>
# </div>
# """)
# Base.show(io, m, result)
# end
end
👀 Reading hidden code
1.9 ms
flatmap (generic function with 1 method)
flatmap(args...) = vcat(map(args...)...)
👀 Reading hidden code
450 μs
commas (generic function with 2 methods)
function commas(xs, comma=@htl("<span class='comma'>, </span>"))
flatmap(enumerate(xs)) do (i,x)
if i == length(xs)
[x]
else
[x,comma]
end
end
end
👀 Reading hidden code
1.5 ms
embed_display (generic function with 1 method)
emb = embed_display
👀 Reading hidden code
12.1 μs
div (generic function with 1 method)
div(x; class="", style="") = @htl("<div class=$(class) style=$(style)>$(x)</div>")
👀 Reading hidden code
1.6 ms
div (generic function with 2 methods)
div(; class="", style="") = x -> @htl("<div class=$(class) style=$(style)>$(x)</div>")
👀 Reading hidden code
1.9 ms

👀 Reading hidden code
68.7 μs
prettycolors (generic function with 1 method)
prettycolors(e) = Markdown.MD([Markdown.Code("julia", string(remove_linenums(e)))])
👀 Reading hidden code
482 μs
remove_linenums (generic function with 1 method)
remove_linenums(e::Expr) = if e.head === :macrocall
Expr(e.head, (remove_linenums(x) for x in e.args)...)
else
Expr(e.head, (remove_linenums(x) for x in e.args if !(x isa LineNumberNode))...)
end
👀 Reading hidden code
1.9 ms
remove_linenums (generic function with 2 methods)
remove_linenums(x) = x
👀 Reading hidden code
338 μs

DEbugging 1

md"""
# DEbugging 1
"""
👀 Reading hidden code
170 μs
onestep (generic function with 1 method)
function onestep(e::Expr; m=Module())
results = Any[]
# push!(results, e)
arg_results = Any[a for a in e.args]
for (i,a) in enumerate(e.args)
arg_results[i] = if a isa QuoteNode
a
elseif (e.head === :call || e.head === :let) && i == 1
a
elseif a isa Expr
inner_results = onestep(a; m=m)
for ir in inner_results
arg_results[i] = ir
push!(results, Expr(e.head, arg_results...))
end
inner_results[end]
else
a
end
# push!(results, Expr(e.head, arg_results...))
end
push!(results, Core.eval(m, Expr(e.head, arg_results...)))
results
end
👀 Reading hidden code
3.6 ms
expr_debug (generic function with 1 method)
function expr_debug(x; )
e = remove_linenums(x)
Any[e, onestep(e)...]
end
👀 Reading hidden code
542 μs
UInt64
👀 Reading hidden code
2.3 ms
expr_hash (generic function with 1 method)
👀 Reading hidden code
1.1 ms
expr_hash (generic function with 2 methods)
👀 Reading hidden code
375 μs
debug_result = expr_debug(:(
let
r = if rand(Bool)
20
else
16
end
y = sqrt(4)
y == sqrt(sqrt(r))
end
));
👀 Reading hidden code
45.0 ms
@bind step Slider(1:length(debug_result))
👀 Reading hidden code
644 μs
let
    r = if rand(Bool)
            20
        else
            16
        end
    y = sqrt(4)
    y == sqrt(sqrt(r))
end
debug_result[step] |> prettycolors
👀 Reading hidden code
81.3 ms

Debugging 1.5

md"""
# Debugging 1.5
"""
👀 Reading hidden code
194 μs
struct Computed
x
end
👀 Reading hidden code
878 μs
computed (generic function with 1 method)
computed(x) = Computed(x)
👀 Reading hidden code
344 μs
expand_computed (generic function with 1 method)
expand_computed(x) = x
👀 Reading hidden code
357 μs
expand_computed (generic function with 2 methods)
expand_computed(c::Computed) = c.x
👀 Reading hidden code
391 μs
expand_computed (generic function with 3 methods)
expand_computed(e::Expr) = Expr(e.head, expand_computed.(e.args)...)
👀 Reading hidden code
473 μs
onestep_light (generic function with 1 method)
onestep_light(x::Any) = [lazycomputedwrap(x)]
👀 Reading hidden code
387 μs
lazyevalwrap (generic function with 1 method)
function lazyevalwrap(x)
Expr(:($), x)
end
👀 Reading hidden code
351 μs
lazycomputedwrap (generic function with 1 method)
function lazycomputedwrap(x)
Computed
Expr(:($), Expr(:call, GlobalRef(@__MODULE__, :Computed), x))
end
👀 Reading hidden code
435 μs
:([1, 2] + $(Expr(:$, :(Main.workspace#5.Computed([1, 2, z])))))
Expr(:call, :+, :([1,2]), lazycomputedwrap(:([1,2,z])))
👀 Reading hidden code
52.1 μs
onestep_light(:(sqrt(first([1,2]))))
👀 Reading hidden code
160 ms
@cool (macro with 1 method)
macro cool()
x1 = Expr(:call, :+, :([1,2]), lazycomputedwrap(:([1,2,z])))
# xs = [x1,x1]
xs = onestep_light(:(sqrt(first([1,2]))))[1:1]
quote
# $(esc(Expr(:quote, xs)))
# $(esc([Expr(:quote, x1), Expr(:quote, x1)]))
# $([esc(Expr(:quote, x1)), esc(Expr(:quote, x1))])
# $([esc(Expr(:quote, x1)), esc(Expr(:quote, x1))]...)
# [$([esc(Expr(:quote, x1)), esc(Expr(:quote, x1))]...)]
[$([esc(Expr(:quote, x)) for x in xs]...)]
# [$(esc(Expr(:quote, x1))), $(esc(Expr(:quote, x1)))]
# [$(esc(Expr(:quote, x)))]
end
end
👀 Reading hidden code
1.2 ms
@showme (macro with 1 method)
macro showme(expr)
quote
$(Expr(:quote, Expr(:quote, expr)))
end
end
👀 Reading hidden code
508 μs
:($(Expr(:quote, :(a + $(Expr(:$, :b))))))
@showme a + $b
👀 Reading hidden code
3.1 ms
Main.workspace#6
@__MODULE__
👀 Reading hidden code
16.6 μs
Error message

LoadError: UndefVarError: workspace2594 not defined

in expression starting at /home/runner/work/disorganised-mess/disorganised-mess/testing and debugging 3 no interpolate.jl#==#fce0b2de-7f7b-4ce8-8a16-079428041fb8:2

Stack trace

Here is what happened, the most recent locations are first:

  1. module XX	z = Main.workspace2594.@cool()
module XX
z = Main.workspace2594.@cool()
end
👀 Reading hidden code
---
Error message

UndefVarError: z not defined

XX.z
👀 Reading hidden code
---
let
z = 1299
@cool()
end
👀 Reading hidden code
42.9 ms
Array{Expr}((1,))
  1: Expr
    head: Symbol call
    args: Array{Any}((2,))
      1: Symbol sqrt
      2: Expr
        head: Symbol call
        args: Array{Any}((2,))
          1: Symbol first
          2: Computed
            x: Array{Int64}((2,)) [1, 2]
@cool() |> Dump
👀 Reading hidden code
4.1 ms
Expr
  head: Symbol block
  args: Array{Any}((2,))
    1: LineNumberNode
      line: Int64 14
      file: Symbol /home/runner/work/disorganised-mess/disorganised-mess/testing and debugging 3 no interpolate.jl#==#61688af2-169e-4c1f-a37f-cc7cc35679dc
    2: Expr
      head: Symbol vect
      args: Array{Any}((1,))
        1: Expr
          head: Symbol call
          args: Array{Any}((4,))
            1: GlobalRef
              mod: Module Core
              name: Symbol _expr
            2: QuoteNode
              value: Symbol call
            3: QuoteNode
              value: Symbol sqrt
            4: Expr
              head: Symbol call
              args: Array{Any}((4,))
                1: GlobalRef
                  mod: Module Core
                  name: Symbol _expr
                2: QuoteNode
                  value: Symbol call
                3: QuoteNode
                  value: Symbol first
                4: Expr
                  head: Symbol call
                  args: Array{Any}((2,))
                    1: GlobalRef
                      mod: Module Main.workspace#5
                      name: Symbol Computed
                    2: Expr
                      head: Symbol vect
                      args: Array{Any}((2,))
                        1: Int64 1
                        2: Int64 2
Dump(@macroexpand @cool(); maxdepth=999)
👀 Reading hidden code
4.8 ms
onestep_light (generic function with 2 methods)
function onestep_light(e::Expr)
results = Any[]
seval(ex) = lazycomputedwrap(ex)#Computed(Core.eval(m,ex))
# will be modified
arg_results = Any[a for a in e.args]
push_intermediate() = push!(results, Expr(e.head, arg_results...))

if e.head === :call || e.head === :begin || e.head === :block

for (i,a) in enumerate(e.args)
if a isa QuoteNode
a
elseif (Meta.isexpr(e, :call) || Meta.isexpr(e, :let)) && i == 1
a
elseif a isa Symbol
arg_results[i] = seval(a)
push_intermediate()
elseif a isa Expr
inner_results = onestep_light(a)
for ir in inner_results
arg_results[i] = ir
push_intermediate()
end

arg_results[i] = inner_results[end]
else
a
end
end
end
push!(results, seval(expand_computed(Expr(e.head, arg_results...))))
results
end
👀 Reading hidden code
5.2 ms
map(1:1) do i
@eval_step_by_step 2 + $i
end
👀 Reading hidden code
80.3 μs
step_by_step (generic function with 1 method)
function step_by_step(expr; __module__)
Computed
onestep_light
escquote(x) = x#Core.eval(__module__, Expr(:quote, x))
if can_interpret(expr)
quote
# Any[$(QuoteNode(expr)), $(escquote.(onestep_light(expr)))...]
# $(escquote.(onestep_light(expr)))
end
escquote.(onestep_light(expr))
else
quote
[$(QuoteNode(expr)), Computed($(esc(expr)))]
end
end
end
👀 Reading hidden code
2.4 ms
@eval_step_by_step sqrt(length([1,2]))
👀 Reading hidden code
106 μs
onestep_light(:(1+sqrt(z)))
👀 Reading hidden code
31.5 ms
:(1 + sqrt($(Expr(:$, :z))))
ezz = let
e = Expr(:$, :z)
:(1 + sqrt($e))
end
👀 Reading hidden code
46.1 μs
@eyo (macro with 1 method)
macro eyo()
ezz
end
👀 Reading hidden code
378 μs
Error message

syntax: "$" expression outside quote around /home/runner/work/disorganised-mess/disorganised-mess/testing and debugging 3 no interpolate.jl#==#611800fe-2ba5-4d89-a3aa-8933ec60bf2e:1

Probably not your fault!
@eyo()
👀 Reading hidden code
---
Error message

syntax: "$" expression outside quote

eval(:(sqrt(length($(Expr(:$, :(Main.workspace2618.Computed([1, 2]))))))))
👀 Reading hidden code
---
@eval_step_by_step (macro with 1 method)
macro eval_step_by_step(e)
step_by_step
quote
[$(step_by_step(e; __module__=__module__))...]
end
end
👀 Reading hidden code
644 μs
@wow (macro with 1 method)
macro wow(ex)
# esc(Core.eval(__module__, Expr(:quote, e)))
esc(Expr(:call, GlobalRef(Core, :eval), __module__, Expr(:quote, ex)))
end
👀 Reading hidden code
503 μs
quote
    [Expr[:(sqrt(sqrt($(Expr(:$, :(Main.workspace#5.Computed(3 + 2))))))), :(sqrt($(Expr(:$, :(Main.workspace#5.Computed(sqrt($(Expr(:$, :(Main.workspace#5.Computed(3 + 2))))))))))), :($(Expr(:$, :(Main.workspace#5.Computed(sqrt($(Expr(:$, :(Main.workspace#5.Computed(sqrt($(Expr(:$, :(Main.workspace#5.Computed(3 + 2)))))))))))))))]...]
end
let
i = 123
remove_linenums( @macroexpand @eval_step_by_step sqrt(sqrt(3 + 2)) )
end
👀 Reading hidden code
1.5 ms
map(1:1) do i
@macroexpand @eval_step_by_step 2342342 + $i
end
👀 Reading hidden code
22.1 ms
quote
    #= /home/runner/work/disorganised-mess/disorganised-mess/testing and debugging 3 no interpolate.jl#==#a661e172-6afb-42ff-bd43-bb5b787ee5ed:4 =#
    [Expr[:($(Expr(:$, :(Main.workspace#5.Computed(x)))) == [1, 2]), :($(Expr(:$, :(Main.workspace#5.Computed(x)))) == $(Expr(:$, :(Main.workspace#5.Computed([1, 2]))))), :($(Expr(:$, :(Main.workspace#5.Computed($(Expr(:$, :(Main.workspace#5.Computed(x)))) == $(Expr(:$, :(Main.workspace#5.Computed([1, 2])))))))))]...]
end
@macroexpand @eval_step_by_step x == [1,2]
👀 Reading hidden code
154 μs
@eval_step_by_step xasdf = 123
👀 Reading hidden code
54.0 μs
Error message

UndefVarError: xasdf not defined

Stack trace

Here is what happened, the most recent locations are first:

  1. xasdf
computer bad, you GREAT!
xasdf
👀 Reading hidden code
---
onestep_light(quote
1+2
2+3
4+5
sqrt(sqrt(sqrt(5)))
end |> remove_linenums)
👀 Reading hidden code
4.9 ms
can_interpret (generic function with 1 method)
can_interpret(x) = true
👀 Reading hidden code
329 μs
can_interpret_call_arg (generic function with 1 method)
can_interpret_call_arg(e::Expr) = !(e.head === :(...) || e.head === :kw || e.head === :parameters)
👀 Reading hidden code
630 μs
can_interpret_call_arg (generic function with 2 methods)
can_interpret_call_arg(x) = true
👀 Reading hidden code
335 μs
true
Meta.isbinaryoperator(:(==))
👀 Reading hidden code
5.0 ms
can_interpret (generic function with 2 methods)
can_interpret(e::Expr) = if false
false
elseif e.head === :call && !all(can_interpret_call_arg, e.args)
false
# elseif e.head === :(=) || e.head === :macrocall
# false
else
all(can_interpret, e.args)
end
👀 Reading hidden code
670 μs

Displaying

👀 Reading hidden code
166 μs

👀 Reading hidden code
66.1 μs
find_computed! (generic function with 1 method)
find_computed!(found, c::Computed) = push!(found, c)
👀 Reading hidden code
368 μs
find_computed! (generic function with 2 methods)
find_computed!(found, expr::Expr) = find_computed!.([found], expr.args)
👀 Reading hidden code
470 μs
find_computed! (generic function with 3 methods)
find_computed!(found, x) = nothing
👀 Reading hidden code
337 μs
find_computed (generic function with 1 method)
find_computed(x) = let
r = Any[]
find_computed!(r, x)
r
end
👀 Reading hidden code
463 μs
onestep_light(quote
1+2
2+3
4+5
sqrt(sqrt(sqrt(5)))
end |> remove_linenums) .|> find_computed
👀 Reading hidden code
1.0 s
slot! (generic function with 1 method)
slot!(found, c::Computed) = let
k = Symbol("__slot", join(rand('a':'z', 16)), "__")
found[k] = c
k
end
👀 Reading hidden code
594 μs
slot! (generic function with 2 methods)
slot!(found, x) = x
👀 Reading hidden code
346 μs
slot! (generic function with 3 methods)
slot!(found, e::Expr) = Expr(e.head, slot!.([found], e.args)...)
👀 Reading hidden code
543 μs
slot (generic function with 1 method)
slot(e) = let
d = Dict{Symbol,Any}()
new_e = slot!(d, e)
d, new_e
end
👀 Reading hidden code
536 μs
onestep_light(quote
(1+2) + (7-6)
2+3
4+5
sqrt(sqrt(sqrt(5)))
end |> remove_linenums) .|> slot
👀 Reading hidden code
356 ms
preish (generic function with 1 method)
preish(x) = @htl("<pre-ish>$(x)</pre-ish>")
👀 Reading hidden code
468 ms
display_slotted (generic function with 1 method)
function display_slotted(expr)
d, e = slot(expr)
s = string(e |> remove_linenums)
lines = split(s, "\n")
r = r"\_\_slot[a-z]{16}\_\_"
@htl("""<slotted-code>
$(
map(lines) do l
keys = [Symbol(m.match) for m in eachmatch(r, l)]
rest = split(l, r; keepempty=true)
result = vcat((
[(isempty(r) ? @htl("") : preish(r)), embed_display(d[k].x)]
for (r,k) in zip(rest, keys)
)...)
push!(result, preish(last(rest)))
@htl("<line-like>$(result)</line-like>")
end
)
</slotted-code>""")
end
👀 Reading hidden code
251 ms
html"""
<style>
slotted-code {
font-family: "JuliaMono", monospace;
font-size: .75rem;
display: flex;
flex-direction: column;
}
pre-ish {
white-space: pre;
}

line-like {
display: flex;
align-items: baseline;
}
"""
👀 Reading hidden code
104 μs
# rs = @eval_step_by_step(begin
# (1+2) + (7-6)
# first(2000 .+ 30 .* rand(2+2))
# 4+5
# sqrt(sqrt(sqrt(5)))
# end) .|> display_slotted
👀 Reading hidden code
8.9 μs
using Plots
👀 Reading hidden code
3.4 s
plot (generic function with 1 method)
plot(args...; kwargs...) = Plots.plot(args...; size=(100,100), kwargs...)
👀 Reading hidden code
1.3 ms
rs = @eval_step_by_step(begin
(1+2) + (7-6)
plot(2000 .+ 30 .* rand(2+2))
4+5
sqrt(sqrt(sqrt(5)))
end) .|> display_slotted
👀 Reading hidden code
317 ms
@bind rindex Slider(eachindex(rs))
👀 Reading hidden code
29.7 ms
begin $(Main.workspace#5.Computed(1 + 2)) + (7 - 6) plot(2000 .+ 30 .* rand(2 + 2)) 4 + 5 sqrt(sqrt(sqrt(5)))end
rs[rindex]
👀 Reading hidden code
12.0 μs
begin $(Main.workspace#5.Computed(1 + 2)) + (7 - 6) plot(2000 .+ 30 .* rand(2 + 2)) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)) plot(2000 .+ 30 .* rand(2 + 2)) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot(2000 .+ 30 .* rand(2 + 2)) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot(2000 .+ 30 .* rand($(Main.workspace#5.Computed(2 + 2)))) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot(2000 .+ 30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) sqrt(sqrt($(Main.workspace#5.Computed(sqrt(5)))))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) sqrt($(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt(5)))))))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) $(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt(5)))))))))end $(Main.workspace#5.Computed(begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) $(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt(5))))))))) end))
frames(rs)
👀 Reading hidden code
12.7 μs
@visual_debug (macro with 1 method)
macro visual_debug(expr)
frames
display_slotted
var"@eval_step_by_step"
quote
@eval_step_by_step($(expr)) .|> display_slotted |> frames
end
end
👀 Reading hidden code
613 μs
begin $(Main.workspace#5.Computed(1 + 2)) + (7 - 6) plot(2000 .+ 30 .* rand(2 + 2)) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)) plot(2000 .+ 30 .* rand(2 + 2)) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot(2000 .+ 30 .* rand(2 + 2)) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot(2000 .+ 30 .* rand($(Main.workspace#5.Computed(2 + 2)))) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot(2000 .+ 30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) 4 + 5 sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) sqrt(sqrt(sqrt(5)))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) sqrt(sqrt($(Main.workspace#5.Computed(sqrt(5)))))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) sqrt($(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt(5)))))))end begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) $(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt(5)))))))))end $(Main.workspace#5.Computed(begin $(Main.workspace#5.Computed($(Main.workspace#5.Computed(1 + 2)) + $(Main.workspace#5.Computed(7 - 6)))) $(Main.workspace#5.Computed(plot($(Main.workspace#5.Computed(2000 .+ $(Main.workspace#5.Computed(30 .* $(Main.workspace#5.Computed(rand($(Main.workspace#5.Computed(2 + 2)))))))))))) $(Main.workspace#5.Computed(4 + 5)) $(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt($(Main.workspace#5.Computed(sqrt(5))))))))) end))
@visual_debug begin
(1+2) + (7-6)
plot(2000 .+ 30 .* rand(2+2))
4+5
sqrt(sqrt(sqrt(5)))
end
👀 Reading hidden code
4.4 ms
frames (generic function with 1 method)
function frames(fs)
l = length(fs)
startframe = l > 2 ? l - 1 : l
@htl("""
<p-frame-viewer>
<p-frames>
$(fs)
</p-frames>
<p-frame-controls>
<img src="https://cdn.jsdelivr.net/gh/ionic-team/ionicons@5.0.0/src/svg/time-outline.svg" style="width: 1em; transform: scale(-1,1); opacity: .5; margin-left: 2em;">
<input class="timescrub" style="filter: hue-rotate(149deg) grayscale(.9);" type=range min=1 max=$(l) value=$(startframe)>
</p-frame-controls>
<script>
const div = currentScript.parentElement
const input = div.querySelector("p-frame-controls > input.timescrub")
const frames = div.querySelector("p-frames")
const setviz = () => {
Array.from(frames.children).forEach((f,i) => {
f.style.display = i + 1 === input.valueAsNumber ? "inherit" : "none"
})
}
setviz()
input.addEventListener("input", setviz)

</script>



</p-frame-viewer>
""")
end
👀 Reading hidden code
839 μs
👀 Reading hidden code
69.1 μs
👀 Reading hidden code
67.4 μs
👀 Reading hidden code
66.6 μs
👀 Reading hidden code
65.3 μs
👀 Reading hidden code
65.6 μs
👀 Reading hidden code
66.4 μs