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}