export const description = ` Execution tests for the 'cross' builtin function T is AbstractFloat, f32, or f16 @const fn cross(e1: vec3 ,e2: vec3) -> vec3 Returns the cross product of e1 and e2. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeF32, TypeVec } from '../../../../../util/conversion.js'; import { crossInterval } from '../../../../../util/f32_interval.js'; import { vectorF32Range } from '../../../../../util/math.js'; import { makeCaseCache } from '../../case_cache.js'; import { allInputSources, generateVectorPairToVectorCases, run } from '../../expression.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); export const d = makeCaseCache('cross', { f32_const: () => { return generateVectorPairToVectorCases( vectorF32Range(3), vectorF32Range(3), 'f32-only', crossInterval ); }, f32_non_const: () => { return generateVectorPairToVectorCases( vectorF32Range(3), vectorF32Range(3), 'unfiltered', crossInterval ); }, }); g.test('abstract_float') .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') .desc(`abstract float tests`) .params(u => u.combine('inputSource', allInputSources)) .unimplemented(); g.test('f32') .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') .desc(`f32 tests`) .params(u => u.combine('inputSource', allInputSources)) .fn(async t => { const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); await run( t, builtin('cross'), [TypeVec(3, TypeF32), TypeVec(3, TypeF32)], TypeVec(3, TypeF32), t.params, cases ); }); g.test('f16') .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') .desc(`f16 tests`) .params(u => u.combine('inputSource', allInputSources)) .unimplemented();