| export const description = `Validation tests for binary ops`; |
| |
| import { makeTestGroup } from '../../../../../common/framework/test_group.js'; |
| import { keysOf } from '../../../../../common/util/data_tables.js'; |
| import { ShaderValidationTest } from '../../shader_validation_test.js'; |
| |
| export const g = makeTestGroup(ShaderValidationTest); |
| |
| const kTests = { |
| and_bool_literal_bool_literal: { |
| src: `let a = true & true;`, |
| pass: true, |
| }, |
| and_bool_expr_bool_expr: { |
| src: `let a = (1 == 2) & (3 == 4);`, |
| pass: true, |
| }, |
| and_bool_literal_bool_expr: { |
| src: `let a = true & (1 == 2);`, |
| pass: true, |
| }, |
| and_bool_expr_bool_literal: { |
| src: `let a = (1 == 2) & true;`, |
| pass: true, |
| }, |
| and_bool_literal_int_literal: { |
| src: `let a = true & 1;`, |
| pass: false, |
| }, |
| and_int_literal_bool_literal: { |
| src: `let a = 1 & true;`, |
| pass: false, |
| }, |
| and_bool_expr_int_literal: { |
| src: `let a = (1 == 2) & 1;`, |
| pass: false, |
| }, |
| and_int_literal_bool_expr: { |
| src: `let a = 1 & (1 == 2);`, |
| pass: false, |
| }, |
| |
| or_bool_literal_bool_literal: { |
| src: `let a = true | true;`, |
| pass: true, |
| }, |
| or_bool_expr_bool_expr: { |
| src: `let a = (1 == 2) | (3 == 4);`, |
| pass: true, |
| }, |
| or_bool_literal_bool_expr: { |
| src: `let a = true | (1 == 2);`, |
| pass: true, |
| }, |
| or_bool_expr_bool_literal: { |
| src: `let a = (1 == 2) | true;`, |
| pass: true, |
| }, |
| or_bool_literal_int_literal: { |
| src: `let a = true | 1;`, |
| pass: false, |
| }, |
| or_int_literal_bool_literal: { |
| src: `let a = 1 | true;`, |
| pass: false, |
| }, |
| or_bool_expr_int_literal: { |
| src: `let a = (1 == 2) | 1;`, |
| pass: false, |
| }, |
| or_int_literal_bool_expr: { |
| src: `let a = 1 | (1 == 2);`, |
| pass: false, |
| }, |
| }; |
| |
| g.test('all') |
| .desc('Test that binary operators are validated correctly') |
| .params(u => u.combine('stmt', keysOf(kTests))) |
| .fn(t => { |
| const code = ` |
| @vertex |
| fn vtx() -> @builtin(position) vec4f { |
| ${kTests[t.params.stmt].src} |
| return vec4f(1); |
| } |
| `; |
| t.expectCompileResult(kTests[t.params.stmt].pass, code); |
| }); |