Skip to content

Commit

Permalink
wgsl: Implement AbstractInt min execution tests
Browse files Browse the repository at this point in the history
Issue #1297
  • Loading branch information
zoddicus committed Feb 12, 2024
1 parent 8ca8543 commit 4047b69
Show file tree
Hide file tree
Showing 3 changed files with 140 additions and 119 deletions.
210 changes: 105 additions & 105 deletions src/resources/cache/hashes.json
Original file line number Diff line number Diff line change
@@ -1,107 +1,107 @@
{
"webgpu/shader/execution/binary/af_addition.bin": "d2a94254",
"webgpu/shader/execution/binary/af_logical.bin": "e32bdae7",
"webgpu/shader/execution/binary/af_division.bin": "998cb6fc",
"webgpu/shader/execution/binary/af_matrix_addition.bin": "496bd4ec",
"webgpu/shader/execution/binary/af_matrix_subtraction.bin": "dd4e9a4f",
"webgpu/shader/execution/binary/af_multiplication.bin": "e81deb2c",
"webgpu/shader/execution/binary/af_remainder.bin": "5aeed2e",
"webgpu/shader/execution/binary/af_subtraction.bin": "dc69ddc1",
"webgpu/shader/execution/binary/f16_addition.bin": "18815537",
"webgpu/shader/execution/binary/f16_logical.bin": "62ffb51f",
"webgpu/shader/execution/binary/f16_division.bin": "e4bf7770",
"webgpu/shader/execution/binary/f16_matrix_addition.bin": "ca4752e2",
"webgpu/shader/execution/binary/f16_matrix_matrix_multiplication.bin": "fec02413",
"webgpu/shader/execution/binary/f16_matrix_scalar_multiplication.bin": "1a7e0d08",
"webgpu/shader/execution/binary/f16_matrix_subtraction.bin": "8044743e",
"webgpu/shader/execution/binary/f16_matrix_vector_multiplication.bin": "ffb049e3",
"webgpu/shader/execution/binary/f16_multiplication.bin": "321b90f1",
"webgpu/shader/execution/binary/f16_remainder.bin": "bafa853",
"webgpu/shader/execution/binary/f16_subtraction.bin": "95a6af75",
"webgpu/shader/execution/binary/f32_addition.bin": "84b9178a",
"webgpu/shader/execution/binary/f32_logical.bin": "bc43ddfb",
"webgpu/shader/execution/binary/f32_division.bin": "2a526e73",
"webgpu/shader/execution/binary/f32_matrix_addition.bin": "23f30d9c",
"webgpu/shader/execution/binary/f32_matrix_matrix_multiplication.bin": "955042e6",
"webgpu/shader/execution/binary/f32_matrix_scalar_multiplication.bin": "61829041",
"webgpu/shader/execution/binary/f32_matrix_subtraction.bin": "2f60e0a",
"webgpu/shader/execution/binary/f32_matrix_vector_multiplication.bin": "3d6aba5e",
"webgpu/shader/execution/binary/f32_multiplication.bin": "2b4ddfb",
"webgpu/shader/execution/binary/f32_remainder.bin": "a3162fbe",
"webgpu/shader/execution/binary/f32_subtraction.bin": "5844472c",
"webgpu/shader/execution/binary/i32_arithmetic.bin": "77bd762d",
"webgpu/shader/execution/binary/i32_comparison.bin": "deaf3d06",
"webgpu/shader/execution/binary/u32_arithmetic.bin": "91ddc813",
"webgpu/shader/execution/binary/u32_comparison.bin": "82d7e10a",
"webgpu/shader/execution/abs.bin": "c2a08da0",
"webgpu/shader/execution/acos.bin": "ecb8f6e4",
"webgpu/shader/execution/acosh.bin": "e908c085",
"webgpu/shader/execution/asin.bin": "db1956dd",
"webgpu/shader/execution/asinh.bin": "d1c4370e",
"webgpu/shader/execution/atan.bin": "d32f84de",
"webgpu/shader/execution/atan2.bin": "c82ce2a9",
"webgpu/shader/execution/atanh.bin": "1d7fa05e",
"webgpu/shader/execution/bitcast.bin": "e6af5117",
"webgpu/shader/execution/ceil.bin": "6822702d",
"webgpu/shader/execution/clamp.bin": "2dcc8e33",
"webgpu/shader/execution/cos.bin": "1e4b5876",
"webgpu/shader/execution/cosh.bin": "88b43457",
"webgpu/shader/execution/cross.bin": "64b251e3",
"webgpu/shader/execution/degrees.bin": "ff5755de",
"webgpu/shader/execution/determinant.bin": "89ce1093",
"webgpu/shader/execution/distance.bin": "5694ecf1",
"webgpu/shader/execution/dot.bin": "60da4277",
"webgpu/shader/execution/exp.bin": "5ae18fc8",
"webgpu/shader/execution/exp2.bin": "ff8f009b",
"webgpu/shader/execution/faceForward.bin": "6ce196c1",
"webgpu/shader/execution/floor.bin": "addfc3d9",
"webgpu/shader/execution/fma.bin": "668f05ee",
"webgpu/shader/execution/fract.bin": "6d036c34",
"webgpu/shader/execution/frexp.bin": "3609ccd2",
"webgpu/shader/execution/inverseSqrt.bin": "b65957cd",
"webgpu/shader/execution/ldexp.bin": "99dcba57",
"webgpu/shader/execution/length.bin": "48edc788",
"webgpu/shader/execution/log.bin": "59d405b3",
"webgpu/shader/execution/log2.bin": "b897533e",
"webgpu/shader/execution/max.bin": "bb46b974",
"webgpu/shader/execution/min.bin": "e4e95641",
"webgpu/shader/execution/mix.bin": "4b781b3b",
"webgpu/shader/execution/modf.bin": "dda61537",
"webgpu/shader/execution/normalize.bin": "73a2bb69",
"webgpu/shader/execution/pack2x16float.bin": "d4a1d8f6",
"webgpu/shader/execution/pow.bin": "f4b1f7c6",
"webgpu/shader/execution/quantizeToF16.bin": "9632b1a3",
"webgpu/shader/execution/radians.bin": "838c408e",
"webgpu/shader/execution/reflect.bin": "401123c3",
"webgpu/shader/execution/refract.bin": "cf86546c",
"webgpu/shader/execution/round.bin": "d1cf1ebb",
"webgpu/shader/execution/saturate.bin": "6ecf8d76",
"webgpu/shader/execution/sign.bin": "f7757f54",
"webgpu/shader/execution/sin.bin": "aff5ff89",
"webgpu/shader/execution/sinh.bin": "10264f6",
"webgpu/shader/execution/smoothstep.bin": "cc165c8d",
"webgpu/shader/execution/sqrt.bin": "9288e28",
"webgpu/shader/execution/step.bin": "3e730ebc",
"webgpu/shader/execution/tan.bin": "b249b4ca",
"webgpu/shader/execution/tanh.bin": "add851dd",
"webgpu/shader/execution/transpose.bin": "ee64fd10",
"webgpu/shader/execution/trunc.bin": "b6c5fdcc",
"webgpu/shader/execution/unpack2x16float.bin": "46be8a57",
"webgpu/shader/execution/unpack2x16snorm.bin": "f2a50142",
"webgpu/shader/execution/unpack2x16unorm.bin": "6db99ed6",
"webgpu/shader/execution/unpack4x8snorm.bin": "4e88f425",
"webgpu/shader/execution/unpack4x8unorm.bin": "b818c7b",
"webgpu/shader/execution/unary/af_arithmetic.bin": "69e5897a",
"webgpu/shader/execution/unary/af_assignment.bin": "588f3b94",
"webgpu/shader/execution/unary/bool_conversion.bin": "7b22a4bf",
"webgpu/shader/execution/unary/f16_arithmetic.bin": "88bfdf25",
"webgpu/shader/execution/unary/f16_conversion.bin": "257326e2",
"webgpu/shader/execution/unary/f32_arithmetic.bin": "54315cef",
"webgpu/shader/execution/unary/f32_conversion.bin": "15bdedd7",
"webgpu/shader/execution/unary/i32_arithmetic.bin": "d8556f43",
"webgpu/shader/execution/unary/i32_complement.bin": "d044f52",
"webgpu/shader/execution/unary/i32_conversion.bin": "d1d94808",
"webgpu/shader/execution/unary/u32_complement.bin": "5458ccb1",
"webgpu/shader/execution/unary/u32_conversion.bin": "a7b4272e",
"webgpu/shader/execution/unary/ai_assignment.bin": "b15b5af8"
"webgpu/shader/execution/binary/af_addition.bin": "cb4ff820",
"webgpu/shader/execution/binary/af_logical.bin": "d17b5df5",
"webgpu/shader/execution/binary/af_division.bin": "6fdb0304",
"webgpu/shader/execution/binary/af_matrix_addition.bin": "80dfea49",
"webgpu/shader/execution/binary/af_matrix_subtraction.bin": "9f810141",
"webgpu/shader/execution/binary/af_multiplication.bin": "70cf8afc",
"webgpu/shader/execution/binary/af_remainder.bin": "9860e132",
"webgpu/shader/execution/binary/af_subtraction.bin": "96974c9c",
"webgpu/shader/execution/binary/f16_addition.bin": "8c8203e9",
"webgpu/shader/execution/binary/f16_logical.bin": "76e252cc",
"webgpu/shader/execution/binary/f16_division.bin": "5ba64e93",
"webgpu/shader/execution/binary/f16_matrix_addition.bin": "214ea5e",
"webgpu/shader/execution/binary/f16_matrix_matrix_multiplication.bin": "aa3e1427",
"webgpu/shader/execution/binary/f16_matrix_scalar_multiplication.bin": "bf401aae",
"webgpu/shader/execution/binary/f16_matrix_subtraction.bin": "f9ab2668",
"webgpu/shader/execution/binary/f16_matrix_vector_multiplication.bin": "b8569c57",
"webgpu/shader/execution/binary/f16_multiplication.bin": "cfa0bf76",
"webgpu/shader/execution/binary/f16_remainder.bin": "d862ae0e",
"webgpu/shader/execution/binary/f16_subtraction.bin": "231cf1ca",
"webgpu/shader/execution/binary/f32_addition.bin": "13241bb6",
"webgpu/shader/execution/binary/f32_logical.bin": "a8310d68",
"webgpu/shader/execution/binary/f32_division.bin": "67cb3aeb",
"webgpu/shader/execution/binary/f32_matrix_addition.bin": "3fa2ed7",
"webgpu/shader/execution/binary/f32_matrix_matrix_multiplication.bin": "532fba43",
"webgpu/shader/execution/binary/f32_matrix_scalar_multiplication.bin": "e3c05b9e",
"webgpu/shader/execution/binary/f32_matrix_subtraction.bin": "dd9a0dd6",
"webgpu/shader/execution/binary/f32_matrix_vector_multiplication.bin": "c6be8263",
"webgpu/shader/execution/binary/f32_multiplication.bin": "4edd887b",
"webgpu/shader/execution/binary/f32_remainder.bin": "53b1b6de",
"webgpu/shader/execution/binary/f32_subtraction.bin": "f66d60bd",
"webgpu/shader/execution/binary/i32_arithmetic.bin": "87ce4213",
"webgpu/shader/execution/binary/i32_comparison.bin": "2d211aa5",
"webgpu/shader/execution/binary/u32_arithmetic.bin": "e3eb3602",
"webgpu/shader/execution/binary/u32_comparison.bin": "ac1a70a",
"webgpu/shader/execution/abs.bin": "ccece9ab",
"webgpu/shader/execution/acos.bin": "a255832a",
"webgpu/shader/execution/acosh.bin": "7db6b627",
"webgpu/shader/execution/asin.bin": "844fcdc9",
"webgpu/shader/execution/asinh.bin": "16a01345",
"webgpu/shader/execution/atan.bin": "1a44c4eb",
"webgpu/shader/execution/atan2.bin": "e5878d2e",
"webgpu/shader/execution/atanh.bin": "ac48c690",
"webgpu/shader/execution/bitcast.bin": "6bbfc829",
"webgpu/shader/execution/ceil.bin": "fc2917df",
"webgpu/shader/execution/clamp.bin": "e33900ba",
"webgpu/shader/execution/cos.bin": "f8542832",
"webgpu/shader/execution/cosh.bin": "71665dd7",
"webgpu/shader/execution/cross.bin": "7ca6c148",
"webgpu/shader/execution/degrees.bin": "1d16d667",
"webgpu/shader/execution/determinant.bin": "261080aa",
"webgpu/shader/execution/distance.bin": "76193c75",
"webgpu/shader/execution/dot.bin": "b631f5d4",
"webgpu/shader/execution/exp.bin": "22cbfbae",
"webgpu/shader/execution/exp2.bin": "659510b6",
"webgpu/shader/execution/faceForward.bin": "56ff7737",
"webgpu/shader/execution/floor.bin": "34452ebd",
"webgpu/shader/execution/fma.bin": "e6ea50e3",
"webgpu/shader/execution/fract.bin": "c4be53b1",
"webgpu/shader/execution/frexp.bin": "a709712c",
"webgpu/shader/execution/inverseSqrt.bin": "901f7691",
"webgpu/shader/execution/ldexp.bin": "27d4a3c6",
"webgpu/shader/execution/length.bin": "3a60795a",
"webgpu/shader/execution/log.bin": "ee0cce57",
"webgpu/shader/execution/log2.bin": "fb618688",
"webgpu/shader/execution/max.bin": "9bcb69f0",
"webgpu/shader/execution/min.bin": "7de09c31",
"webgpu/shader/execution/mix.bin": "d4dc6df1",
"webgpu/shader/execution/modf.bin": "8b6cbef3",
"webgpu/shader/execution/normalize.bin": "b5592ed3",
"webgpu/shader/execution/pack2x16float.bin": "1f5ab985",
"webgpu/shader/execution/pow.bin": "3cf4b485",
"webgpu/shader/execution/quantizeToF16.bin": "8c02aec3",
"webgpu/shader/execution/radians.bin": "7cbf3033",
"webgpu/shader/execution/reflect.bin": "3f6f8c77",
"webgpu/shader/execution/refract.bin": "592b2980",
"webgpu/shader/execution/round.bin": "63e1cb07",
"webgpu/shader/execution/saturate.bin": "fe891136",
"webgpu/shader/execution/sign.bin": "5ac68efd",
"webgpu/shader/execution/sin.bin": "cd6452e6",
"webgpu/shader/execution/sinh.bin": "e5b20e47",
"webgpu/shader/execution/smoothstep.bin": "f4e462d6",
"webgpu/shader/execution/sqrt.bin": "572257fe",
"webgpu/shader/execution/step.bin": "fd8cf95f",
"webgpu/shader/execution/tan.bin": "f31d6d73",
"webgpu/shader/execution/tanh.bin": "ce9c52f6",
"webgpu/shader/execution/transpose.bin": "9bdd93ec",
"webgpu/shader/execution/trunc.bin": "3b985c9d",
"webgpu/shader/execution/unpack2x16float.bin": "eeb290b5",
"webgpu/shader/execution/unpack2x16snorm.bin": "4912d21f",
"webgpu/shader/execution/unpack2x16unorm.bin": "72521cdd",
"webgpu/shader/execution/unpack4x8snorm.bin": "7b871897",
"webgpu/shader/execution/unpack4x8unorm.bin": "9b7e5e50",
"webgpu/shader/execution/unary/af_arithmetic.bin": "7ca530c1",
"webgpu/shader/execution/unary/af_assignment.bin": "eb58f3c2",
"webgpu/shader/execution/unary/bool_conversion.bin": "dc54e223",
"webgpu/shader/execution/unary/f16_arithmetic.bin": "99ae4e3f",
"webgpu/shader/execution/unary/f16_conversion.bin": "2767ead",
"webgpu/shader/execution/unary/f32_arithmetic.bin": "956ebea3",
"webgpu/shader/execution/unary/f32_conversion.bin": "6d948fcd",
"webgpu/shader/execution/unary/i32_arithmetic.bin": "aa07dc4",
"webgpu/shader/execution/unary/i32_complement.bin": "b6396632",
"webgpu/shader/execution/unary/i32_conversion.bin": "f806a29",
"webgpu/shader/execution/unary/u32_complement.bin": "716654f7",
"webgpu/shader/execution/unary/u32_conversion.bin": "f9706caa",
"webgpu/shader/execution/unary/ai_assignment.bin": "feb0db20"
}
44 changes: 30 additions & 14 deletions src/webgpu/shader/execution/expression/call/builtin/min.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,36 +25,52 @@ import {
TypeU32,
i32,
u32,
abstractInt,
TypeAbstractInt,
} from '../../../../../util/conversion.js';
import { minBigInt } from '../../../../../util/math.js';
import { Case } from '../../case.js';
import { allInputSources, onlyConstInputSource, run } from '../../expression.js';

import { abstractFloatBuiltin, builtin } from './builtin.js';
import { abstractFloatBuiltin, abstractIntBuiltin, builtin } from './builtin.js';
import { d } from './min.cache.js';

export const g = makeTestGroup(GPUTest);

/** Generate set of min test cases from list of interesting values */
function generateTestCases(
values: Array<number>,
makeCase: (x: number, y: number) => Case
): Array<Case> {
const cases = new Array<Case>();
values.forEach(e => {
values.forEach(f => {
cases.push(makeCase(e, f));
function generateTestCases<Type>(values: Type[], makeCase: (x: Type, y: Type) => Case): Case[] {
return values.flatMap(e => {
return values.map(f => {
return makeCase(e, f);
});
});
return cases;
}

g.test('abstract_int')
.specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions')
.desc(`abstract int tests`)
.params(u =>
u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4] as const)
u
.combine('inputSource', onlyConstInputSource)
.combine('vectorize', [undefined, 2, 3, 4] as const)
)
.unimplemented();
.fn(async t => {
const makeCase = (x: bigint, y: bigint): Case => {
return { input: [abstractInt(x), abstractInt(y)], expected: abstractInt(minBigInt(x, y)) };
};

const test_values = [-0x70000000n, -2n, -1n, 0n, 1n, 2n, 0x70000000n];
const cases = generateTestCases(test_values, makeCase);

await run(
t,
abstractIntBuiltin('min'),
[TypeAbstractInt, TypeAbstractInt],
TypeAbstractInt,
t.params,
cases
);
});

g.test('u32')
.specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions')
Expand All @@ -67,7 +83,7 @@ g.test('u32')
return { input: [u32(x), u32(y)], expected: u32(Math.min(x, y)) };
};

const test_values: Array<number> = [0, 1, 2, 0x70000000, 0x80000000, 0xffffffff];
const test_values: number[] = [0, 1, 2, 0x70000000, 0x80000000, 0xffffffff];
const cases = generateTestCases(test_values, makeCase);

await run(t, builtin('min'), [TypeU32, TypeU32], TypeU32, t.params, cases);
Expand All @@ -84,7 +100,7 @@ g.test('i32')
return { input: [i32(x), i32(y)], expected: i32(Math.min(x, y)) };
};

const test_values: Array<number> = [-0x70000000, -2, -1, 0, 1, 2, 0x70000000];
const test_values: number[] = [-0x70000000, -2, -1, 0, 1, 2, 0x70000000];
const cases = generateTestCases(test_values, makeCase);

await run(t, builtin('min'), [TypeI32, TypeI32], TypeI32, t.params, cases);
Expand Down
5 changes: 5 additions & 0 deletions src/webgpu/util/math.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2286,3 +2286,8 @@ export function dotProduct(v1: readonly number[], v2: readonly number[]) {
export function absBigInt(v: bigint): bigint {
return v < 0n ? -v : v;
}

/** @returns the minimum from a list of bigints */
export function minBigInt(...vals: bigint[]): bigint {
return vals.reduce((prev, cur) => (cur < prev ? cur : prev));
}

0 comments on commit 4047b69

Please sign in to comment.