1const std = @import("std");
2const builtin = @import("builtin");
3const expect = std.testing.expect;
4
5test "@mulAdd" {
6 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
7 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
8 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
9
10 try comptime testMulAdd();
11 try testMulAdd();
12}
13
14fn testMulAdd() !void {
15 {
16 var a: f32 = 5.5;
17 var b: f32 = 2.5;
18 var c: f32 = 6.25;
19 _ = .{ &a, &b, &c };
20 try expect(@mulAdd(f32, a, b, c) == 20);
21 }
22 {
23 var a: f64 = 5.5;
24 var b: f64 = 2.5;
25 var c: f64 = 6.25;
26 _ = .{ &a, &b, &c };
27 try expect(@mulAdd(f64, a, b, c) == 20);
28 }
29}
30
31test "@mulAdd f16" {
32 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
33 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
34 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
35
36 try comptime testMulAdd16();
37 try testMulAdd16();
38}
39
40fn testMulAdd16() !void {
41 var a: f16 = 5.5;
42 var b: f16 = 2.5;
43 var c: f16 = 6.25;
44 _ = .{ &a, &b, &c };
45 try expect(@mulAdd(f16, a, b, c) == 20);
46}
47
48test "@mulAdd f80" {
49 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
50 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
51 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
52 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
53
54 try comptime testMulAdd80();
55 try testMulAdd80();
56}
57
58fn testMulAdd80() !void {
59 var a: f16 = 5.5;
60 var b: f80 = 2.5;
61 var c: f80 = 6.25;
62 _ = .{ &a, &b, &c };
63 try expect(@mulAdd(f80, a, b, c) == 20);
64}
65
66test "@mulAdd f128" {
67 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
68 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
69 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
70 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
71
72 try comptime testMulAdd128();
73 try testMulAdd128();
74}
75
76fn testMulAdd128() !void {
77 var a: f16 = 5.5;
78 var b: f128 = 2.5;
79 var c: f128 = 6.25;
80 _ = .{ &a, &b, &c };
81 try expect(@mulAdd(f128, a, b, c) == 20);
82}
83
84fn vector16() !void {
85 var a = @Vector(4, f16){ 5.5, 5.5, 5.5, 5.5 };
86 var b = @Vector(4, f16){ 2.5, 2.5, 2.5, 2.5 };
87 var c = @Vector(4, f16){ 6.25, 6.25, 6.25, 6.25 };
88 _ = .{ &a, &b, &c };
89 const x = @mulAdd(@Vector(4, f16), a, b, c);
90
91 try expect(x[0] == 20);
92 try expect(x[1] == 20);
93 try expect(x[2] == 20);
94 try expect(x[3] == 20);
95}
96
97test "vector f16" {
98 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
99 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
100 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
101 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
102
103 try comptime vector16();
104 try vector16();
105}
106
107fn vector32() !void {
108 var a = @Vector(4, f32){ 5.5, 5.5, 5.5, 5.5 };
109 var b = @Vector(4, f32){ 2.5, 2.5, 2.5, 2.5 };
110 var c = @Vector(4, f32){ 6.25, 6.25, 6.25, 6.25 };
111 _ = .{ &a, &b, &c };
112 const x = @mulAdd(@Vector(4, f32), a, b, c);
113
114 try expect(x[0] == 20);
115 try expect(x[1] == 20);
116 try expect(x[2] == 20);
117 try expect(x[3] == 20);
118}
119
120test "vector f32" {
121 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
122 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
123 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
124 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
125
126 try comptime vector32();
127 try vector32();
128}
129
130fn vector64() !void {
131 var a = @Vector(4, f64){ 5.5, 5.5, 5.5, 5.5 };
132 var b = @Vector(4, f64){ 2.5, 2.5, 2.5, 2.5 };
133 var c = @Vector(4, f64){ 6.25, 6.25, 6.25, 6.25 };
134 _ = .{ &a, &b, &c };
135 const x = @mulAdd(@Vector(4, f64), a, b, c);
136
137 try expect(x[0] == 20);
138 try expect(x[1] == 20);
139 try expect(x[2] == 20);
140 try expect(x[3] == 20);
141}
142
143test "vector f64" {
144 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
145 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
146 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
147 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
148
149 try comptime vector64();
150 try vector64();
151}
152
153fn vector80() !void {
154 var a = @Vector(4, f80){ 5.5, 5.5, 5.5, 5.5 };
155 var b = @Vector(4, f80){ 2.5, 2.5, 2.5, 2.5 };
156 var c = @Vector(4, f80){ 6.25, 6.25, 6.25, 6.25 };
157 _ = .{ &a, &b, &c };
158 const x = @mulAdd(@Vector(4, f80), a, b, c);
159 try expect(x[0] == 20);
160 try expect(x[1] == 20);
161 try expect(x[2] == 20);
162 try expect(x[3] == 20);
163}
164
165test "vector f80" {
166 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
167 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
168 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
169 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
170 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
171
172 try comptime vector80();
173 try vector80();
174}
175
176fn vector128() !void {
177 var a = @Vector(4, f128){ 5.5, 5.5, 5.5, 5.5 };
178 var b = @Vector(4, f128){ 2.5, 2.5, 2.5, 2.5 };
179 var c = @Vector(4, f128){ 6.25, 6.25, 6.25, 6.25 };
180 _ = .{ &a, &b, &c };
181 const x = @mulAdd(@Vector(4, f128), a, b, c);
182
183 try expect(x[0] == 20);
184 try expect(x[1] == 20);
185 try expect(x[2] == 20);
186 try expect(x[3] == 20);
187}
188
189test "vector f128" {
190 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
191 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
192 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
193 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
194 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
195
196 try comptime vector128();
197 try vector128();
198}