Skip to content

Commit c6d53e4

Browse files
committed
add tests
1 parent 7b6e651 commit c6d53e4

File tree

1 file changed

+138
-0
lines changed

1 file changed

+138
-0
lines changed

test/output.jl

+138
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
@testset "output" begin
2+
3+
@testset "formatted output" begin
4+
_, out = @grab_output @on_device @mtlprintf("")
5+
@test out == ""
6+
7+
_, out = @grab_output @on_device @mtlprintf("Testing...\n")
8+
@test out == "Testing...\n"
9+
10+
# narrow integer
11+
_, out = @grab_output @on_device @mtlprintf("Testing %d %d...\n", Int32(1), Int32(2))
12+
@test out == "Testing 1 2...\n"
13+
14+
# wide integer
15+
_, out = @grab_output @on_device @mtlprintf("Testing %ld %ld...\n", Int64(1), Int64(2))
16+
@test out == "Testing 1 2...\n"
17+
18+
_, out = @grab_output @on_device begin
19+
@mtlprintf("foo")
20+
@mtlprintf("bar\n")
21+
end
22+
@test out == "foobar\n"
23+
24+
# c argument promotions
25+
function kernel(A)
26+
@mtlprintf("%f %f\n", A[1], A[1])
27+
return
28+
end
29+
x = mtl(ones(2, 2))
30+
_, out = @grab_output begin
31+
Metal.@sync @metal kernel(x)
32+
end
33+
@test out == "1.000000 1.000000\n"
34+
end
35+
36+
@testset "@mtlprint" begin
37+
# basic @mtlprint/@mtlprintln
38+
39+
_, out = @grab_output @on_device @mtlprint("Hello, World\n")
40+
@test out == "Hello, World\n"
41+
42+
_, out = @grab_output @on_device @mtlprintln("Hello, World")
43+
@test out == "Hello, World\n"
44+
45+
46+
# argument interpolation (by the macro, so can use literals)
47+
48+
_, out = @grab_output @on_device @mtlprint("foobar")
49+
@test out == "foobar"
50+
51+
_, out = @grab_output @on_device @mtlprint(:foobar)
52+
@test out == "foobar"
53+
54+
_, out = @grab_output @on_device @mtlprint("foo", "bar")
55+
@test out == "foobar"
56+
57+
_, out = @grab_output @on_device @mtlprint("foobar ", 42)
58+
@test out == "foobar 42"
59+
60+
_, out = @grab_output @on_device @mtlprint("foobar $(42)")
61+
@test out == "foobar 42"
62+
63+
_, out = @grab_output @on_device @mtlprint("foobar $(4)", 2)
64+
@test out == "foobar 42"
65+
66+
_, out = @grab_output @on_device @mtlprint("foobar ", 4, "$(2)")
67+
@test out == "foobar 42"
68+
69+
_, out = @grab_output @on_device @mtlprint(42)
70+
@test out == "42"
71+
72+
_, out = @grab_output @on_device @mtlprint(4, 2)
73+
@test out == "42"
74+
75+
_, out = @grab_output @on_device @mtlprint(Any)
76+
@test out == "Any"
77+
78+
_, out = @grab_output @on_device @mtlprintln("foobar $(42)")
79+
@test out == "foobar 42\n"
80+
81+
82+
# argument types
83+
84+
# we're testing the generated functions now, so can't use literals
85+
function test_output(val, str)
86+
canary = rand(Int32) # if we mess up the main arg, this one will print wrong
87+
_, out = @grab_output @on_device @mtlprint(val, " (", canary, ")")
88+
@test out == "$(str) ($(Int(canary)))"
89+
end
90+
91+
for typ in (Int16, Int32, Int64, UInt16, UInt32, UInt64)
92+
test_output(typ(42), "42")
93+
end
94+
95+
for typ in (Float32,)
96+
test_output(typ(42), "42.000000")
97+
end
98+
99+
test_output(Cchar('c'), "c")
100+
101+
for typ in (Ptr{Cvoid}, Ptr{Int})
102+
ptr = convert(typ, Int(0x12345))
103+
test_output(ptr, "0x12345")
104+
end
105+
106+
test_output(true, "1")
107+
test_output(false, "0")
108+
109+
test_output((1,), "(1,)")
110+
test_output((1,2), "(1, 2)")
111+
test_output((1,2,3.0f0), "(1, 2, 3.000000)")
112+
113+
# escaping
114+
115+
kernel1(val) = (@mtlprint(val); nothing)
116+
_, out = @grab_output @on_device kernel1(42)
117+
@test out == "42"
118+
119+
kernel2(val) = (@mtlprintln(val); nothing)
120+
_, out = @grab_output @on_device kernel2(42)
121+
@test out == "42\n"
122+
end
123+
124+
@testset "@mtlshow" begin
125+
function kernel()
126+
seven_i32 = Int32(7)
127+
three_f32 = Float32(3)
128+
@mtlshow seven_i32
129+
@mtlshow three_f32
130+
@mtlshow 1f0 + 4f0
131+
return
132+
end
133+
134+
_, out = @grab_output @on_device kernel()
135+
@test out == "seven_i32 = 7\nthree_f32 = 3.000000\n1.0f0 + 4.0f0 = 5.000000\n"
136+
end
137+
end
138+

0 commit comments

Comments
 (0)