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