// Copyright 2020 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include <string>
#include <vector>

#include "gmock/gmock.h"
#include "src/reader/spirv/function.h"
#include "src/reader/spirv/parser_impl.h"
#include "src/reader/spirv/parser_impl_test_helper.h"
#include "src/reader/spirv/spirv_tools_helpers_test.h"

namespace tint {
namespace reader {
namespace spirv {
namespace {

using ::testing::HasSubstr;

std::string CommonTypes() {
  return R"(
  %void = OpTypeVoid
  %voidfn = OpTypeFunction %void

  %bool = OpTypeBool
  %true = OpConstantTrue %bool
  %false = OpConstantFalse %bool

  %uint = OpTypeInt 32 0
  %int = OpTypeInt 32 1
  %float = OpTypeFloat 32

  %uint_10 = OpConstant %uint 10
  %uint_20 = OpConstant %uint 20
  %int_30 = OpConstant %int 30
  %int_40 = OpConstant %int 40
  %float_50 = OpConstant %float 50
  %float_60 = OpConstant %float 60

  %ptr_uint = OpTypePointer Function %uint
  %ptr_int = OpTypePointer Function %int
  %ptr_float = OpTypePointer Function %float

  %v2bool = OpTypeVector %bool 2
  %v2uint = OpTypeVector %uint 2
  %v2int = OpTypeVector %int 2
  %v2float = OpTypeVector %float 2

  %v2bool_t_f = OpConstantComposite %v2bool %true %false
  %v2bool_f_t = OpConstantComposite %v2bool %false %true
  %v2uint_10_20 = OpConstantComposite %v2uint %uint_10 %uint_20
  %v2uint_20_10 = OpConstantComposite %v2uint %uint_20 %uint_10
  %v2int_30_40 = OpConstantComposite %v2int %int_30 %int_40
  %v2int_40_30 = OpConstantComposite %v2int %int_40 %int_30
  %v2float_50_60 = OpConstantComposite %v2float %float_50 %float_60
  %v2float_60_50 = OpConstantComposite %v2float %float_60 %float_50
)";
}

// Returns the AST dump for a given SPIR-V assembly constant.
std::string AstFor(std::string assembly) {
  if (assembly == "v2bool_t_f") {
    return R"(TypeConstructor{
          __vec_2__bool
          ScalarConstructor{true}
          ScalarConstructor{false}
        })";
  }
  if (assembly == "v2bool_f_t") {
    return R"(TypeConstructor{
          __vec_2__bool
          ScalarConstructor{false}
          ScalarConstructor{true}
        })";
  }
  if (assembly == "v2uint_10_20") {
    return R"(TypeConstructor{
          __vec_2__u32
          ScalarConstructor{10}
          ScalarConstructor{20}
        })";
  }
  if (assembly == "cast_uint_10") {
    return R"(As<__i32>{
          ScalarConstructor{10}
        })";
  }
  if (assembly == "cast_uint_20") {
    return R"(As<__i32>{
          ScalarConstructor{20}
        })";
  }
  if (assembly == "cast_v2uint_10_20") {
    return R"(As<__vec_2__i32>{
          TypeConstructor{
            __vec_2__u32
            ScalarConstructor{10}
            ScalarConstructor{20}
          }
        })";
  }
  if (assembly == "v2uint_20_10") {
    return R"(TypeConstructor{
          __vec_2__u32
          ScalarConstructor{20}
          ScalarConstructor{10}
        })";
  }
  if (assembly == "cast_v2uint_20_10") {
    return R"(As<__vec_2__i32>{
          TypeConstructor{
            __vec_2__u32
            ScalarConstructor{20}
            ScalarConstructor{10}
          }
        })";
  }
  if (assembly == "cast_int_30") {
    return R"(As<__u32>{
          ScalarConstructor{30}
        })";
  }
  if (assembly == "cast_int_40") {
    return R"(As<__u32>{
          ScalarConstructor{40}
        })";
  }
  if (assembly == "v2int_30_40") {
    return R"(TypeConstructor{
          __vec_2__i32
          ScalarConstructor{30}
          ScalarConstructor{40}
        })";
  }
  if (assembly == "cast_v2int_30_40") {
    return R"(As<__vec_2__u32>{
          TypeConstructor{
            __vec_2__i32
            ScalarConstructor{30}
            ScalarConstructor{40}
          }
        })";
  }
  if (assembly == "v2int_40_30") {
    return R"(TypeConstructor{
          __vec_2__i32
          ScalarConstructor{40}
          ScalarConstructor{30}
        })";
  }
  if (assembly == "cast_v2int_40_30") {
    return R"(As<__vec_2__u32>{
          TypeConstructor{
            __vec_2__i32
            ScalarConstructor{40}
            ScalarConstructor{30}
          }
        })";
  }
  if (assembly == "v2int_40_30") {
    return R"(TypeConstructor{
          __vec_2__i32
          ScalarConstructor{40}
          ScalarConstructor{30}
        })";
  }
  if (assembly == "v2float_50_60") {
    return R"(TypeConstructor{
          __vec_2__f32
          ScalarConstructor{50.000000}
          ScalarConstructor{60.000000}
        })";
  }
  if (assembly == "v2float_60_50") {
    return R"(TypeConstructor{
          __vec_2__f32
          ScalarConstructor{60.000000}
          ScalarConstructor{50.000000}
        })";
  }
  return "bad case";
}

using SpvUnaryLogicalTest = SpvParserTestBase<::testing::Test>;

TEST_F(SpvUnaryLogicalTest, LogicalNot_Scalar) {
  const auto assembly = CommonTypes() + R"(
     %100 = OpFunction %void None %voidfn
     %entry = OpLabel
     %1 = OpLogicalNot %bool %true
     OpReturn
     OpFunctionEnd
  )";
  auto p = parser(test::Assemble(assembly));
  ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
  FunctionEmitter fe(p, *spirv_function(100));
  EXPECT_TRUE(fe.EmitBody()) << p->error();
  EXPECT_THAT(ToString(fe.ast_body()), HasSubstr(R"(
  Variable{
    x_1
    none
    __bool
    {
      UnaryOp{
        not
        ScalarConstructor{true}
      }
    }
  })"))
      << ToString(fe.ast_body());
}

TEST_F(SpvUnaryLogicalTest, LogicalNot_Vector) {
  const auto assembly = CommonTypes() + R"(
     %100 = OpFunction %void None %voidfn
     %entry = OpLabel
     %1 = OpLogicalNot %v2bool %v2bool_t_f
     OpReturn
     OpFunctionEnd
  )";
  auto p = parser(test::Assemble(assembly));
  ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
  FunctionEmitter fe(p, *spirv_function(100));
  EXPECT_TRUE(fe.EmitBody()) << p->error();
  EXPECT_THAT(ToString(fe.ast_body()), HasSubstr(R"(
  Variable{
    x_1
    none
    __vec_2__bool
    {
      UnaryOp{
        not
        TypeConstructor{
          __vec_2__bool
          ScalarConstructor{true}
          ScalarConstructor{false}
        }
      }
    }
  })"))
      << ToString(fe.ast_body());
}

struct BinaryData {
  const std::string res_type;
  const std::string lhs;
  const std::string op;
  const std::string rhs;
  const std::string ast_type;
  const std::string ast_lhs;
  const std::string ast_op;
  const std::string ast_rhs;
};
inline std::ostream& operator<<(std::ostream& out, BinaryData data) {
  out << "BinaryData{" << data.res_type << "," << data.lhs << "," << data.op
      << "," << data.rhs << "," << data.ast_type << "," << data.ast_lhs << ","
      << data.ast_op << "," << data.ast_rhs << "}";
  return out;
}

using SpvBinaryLogicalTest =
    SpvParserTestBase<::testing::TestWithParam<BinaryData>>;

TEST_P(SpvBinaryLogicalTest, EmitExpression) {
  const auto assembly = CommonTypes() + R"(
     %100 = OpFunction %void None %voidfn
     %entry = OpLabel
     %1 = )" + GetParam().op +
                        " %" + GetParam().res_type + " %" + GetParam().lhs +
                        " %" + GetParam().rhs + R"(
     OpReturn
     OpFunctionEnd
  )";
  auto* p = parser(test::Assemble(assembly));
  ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions())
      << p->error() << "\n"
      << assembly;
  FunctionEmitter fe(p, *spirv_function(100));
  EXPECT_TRUE(fe.EmitBody()) << p->error();
  std::ostringstream ss;
  ss << R"(Variable{
    x_1
    none
    )"
     << GetParam().ast_type << "\n    {\n      Binary{"
     << "\n        " << GetParam().ast_lhs << "\n        " << GetParam().ast_op
     << "\n        " << GetParam().ast_rhs;
  EXPECT_THAT(ToString(fe.ast_body()), HasSubstr(ss.str())) << assembly;
}

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_IEqual,
    SpvBinaryLogicalTest,
    ::testing::Values(
        // Both uint
        BinaryData{"bool", "uint_10", "OpIEqual", "uint_20", "__bool",
                   "ScalarConstructor{10}", "equal", "ScalarConstructor{20}"},
        // Both int
        BinaryData{"bool", "int_30", "OpIEqual", "int_40", "__bool",
                   "ScalarConstructor{30}", "equal", "ScalarConstructor{40}"},
        // Both v2uint
        BinaryData{"v2bool", "v2uint_10_20", "OpIEqual", "v2uint_20_10",
                   "__vec_2__bool", AstFor("v2uint_10_20"), "equal",
                   AstFor("v2uint_20_10")},
        // Both v2int
        BinaryData{"v2bool", "v2int_30_40", "OpIEqual", "v2int_40_30",
                   "__vec_2__bool", AstFor("v2int_30_40"), "equal",
                   AstFor("v2int_40_30")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_FOrdEqual,
    SpvBinaryLogicalTest,
    ::testing::Values(BinaryData{"bool", "float_50", "OpFOrdEqual", "float_60",
                                 "__bool", "ScalarConstructor{50.000000}",
                                 "equal", "ScalarConstructor{60.000000}"},
                      BinaryData{"v2bool", "v2float_50_60", "OpFOrdEqual",
                                 "v2float_60_50", "__vec_2__bool",
                                 AstFor("v2float_50_60"), "equal",
                                 AstFor("v2float_60_50")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_INotEqual,
    SpvBinaryLogicalTest,
    ::testing::Values(
        // Both uint
        BinaryData{"bool", "uint_10", "OpINotEqual", "uint_20", "__bool",
                   "ScalarConstructor{10}", "not_equal",
                   "ScalarConstructor{20}"},
        // Both int
        BinaryData{"bool", "int_30", "OpINotEqual", "int_40", "__bool",
                   "ScalarConstructor{30}", "not_equal",
                   "ScalarConstructor{40}"},
        // Both v2uint
        BinaryData{"v2bool", "v2uint_10_20", "OpINotEqual", "v2uint_20_10",
                   "__vec_2__bool", AstFor("v2uint_10_20"), "not_equal",
                   AstFor("v2uint_20_10")},
        // Both v2int
        BinaryData{"v2bool", "v2int_30_40", "OpINotEqual", "v2int_40_30",
                   "__vec_2__bool", AstFor("v2int_30_40"), "not_equal",
                   AstFor("v2int_40_30")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_FOrdNotEqual,
    SpvBinaryLogicalTest,
    ::testing::Values(BinaryData{"bool", "float_50", "OpFOrdNotEqual",
                                 "float_60", "__bool",
                                 "ScalarConstructor{50.000000}", "not_equal",
                                 "ScalarConstructor{60.000000}"},
                      BinaryData{"v2bool", "v2float_50_60", "OpFOrdNotEqual",
                                 "v2float_60_50", "__vec_2__bool",
                                 AstFor("v2float_50_60"), "not_equal",
                                 AstFor("v2float_60_50")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_FOrdLessThan,
    SpvBinaryLogicalTest,
    ::testing::Values(BinaryData{"bool", "float_50", "OpFOrdLessThan",
                                 "float_60", "__bool",
                                 "ScalarConstructor{50.000000}", "less_than",
                                 "ScalarConstructor{60.000000}"},
                      BinaryData{"v2bool", "v2float_50_60", "OpFOrdLessThan",
                                 "v2float_60_50", "__vec_2__bool",
                                 AstFor("v2float_50_60"), "less_than",
                                 AstFor("v2float_60_50")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_FOrdLessThanEqual,
    SpvBinaryLogicalTest,
    ::testing::Values(
        BinaryData{"bool", "float_50", "OpFOrdLessThanEqual", "float_60",
                   "__bool", "ScalarConstructor{50.000000}", "less_than_equal",
                   "ScalarConstructor{60.000000}"},
        BinaryData{"v2bool", "v2float_50_60", "OpFOrdLessThanEqual",
                   "v2float_60_50", "__vec_2__bool", AstFor("v2float_50_60"),
                   "less_than_equal", AstFor("v2float_60_50")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_FOrdGreaterThan,
    SpvBinaryLogicalTest,
    ::testing::Values(BinaryData{"bool", "float_50", "OpFOrdGreaterThan",
                                 "float_60", "__bool",
                                 "ScalarConstructor{50.000000}", "greater_than",
                                 "ScalarConstructor{60.000000}"},
                      BinaryData{"v2bool", "v2float_50_60", "OpFOrdGreaterThan",
                                 "v2float_60_50", "__vec_2__bool",
                                 AstFor("v2float_50_60"), "greater_than",
                                 AstFor("v2float_60_50")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_FOrdGreaterThanEqual,
    SpvBinaryLogicalTest,
    ::testing::Values(
        BinaryData{"bool", "float_50", "OpFOrdGreaterThanEqual", "float_60",
                   "__bool", "ScalarConstructor{50.000000}",
                   "greater_than_equal", "ScalarConstructor{60.000000}"},
        BinaryData{"v2bool", "v2float_50_60", "OpFOrdGreaterThanEqual",
                   "v2float_60_50", "__vec_2__bool", AstFor("v2float_50_60"),
                   "greater_than_equal", AstFor("v2float_60_50")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_LogicalAnd,
    SpvBinaryLogicalTest,
    ::testing::Values(BinaryData{"bool", "true", "OpLogicalAnd", "false",
                                 "__bool", "ScalarConstructor{true}",
                                 "logical_and", "ScalarConstructor{false}"},
                      BinaryData{"v2bool", "v2bool_t_f", "OpLogicalAnd",
                                 "v2bool_f_t", "__vec_2__bool",
                                 AstFor("v2bool_t_f"), "logical_and",
                                 AstFor("v2bool_f_t")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_LogicalOr,
    SpvBinaryLogicalTest,
    ::testing::Values(BinaryData{"bool", "true", "OpLogicalOr", "false",
                                 "__bool", "ScalarConstructor{true}",
                                 "logical_or", "ScalarConstructor{false}"},
                      BinaryData{"v2bool", "v2bool_t_f", "OpLogicalOr",
                                 "v2bool_f_t", "__vec_2__bool",
                                 AstFor("v2bool_t_f"), "logical_or",
                                 AstFor("v2bool_f_t")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_LogicalEqual,
    SpvBinaryLogicalTest,
    ::testing::Values(BinaryData{"bool", "true", "OpLogicalEqual", "false",
                                 "__bool", "ScalarConstructor{true}", "equal",
                                 "ScalarConstructor{false}"},
                      BinaryData{"v2bool", "v2bool_t_f", "OpLogicalEqual",
                                 "v2bool_f_t", "__vec_2__bool",
                                 AstFor("v2bool_t_f"), "equal",
                                 AstFor("v2bool_f_t")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_LogicalNotEqual,
    SpvBinaryLogicalTest,
    ::testing::Values(BinaryData{"bool", "true", "OpLogicalNotEqual", "false",
                                 "__bool", "ScalarConstructor{true}",
                                 "not_equal", "ScalarConstructor{false}"},
                      BinaryData{"v2bool", "v2bool_t_f", "OpLogicalNotEqual",
                                 "v2bool_f_t", "__vec_2__bool",
                                 AstFor("v2bool_t_f"), "not_equal",
                                 AstFor("v2bool_f_t")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_UGreaterThan,
    SpvBinaryLogicalTest,
    ::testing::Values(
        // Both unsigned
        BinaryData{"bool", "uint_10", "OpUGreaterThan", "uint_20", "__bool",
                   "ScalarConstructor{10}", "greater_than",
                   "ScalarConstructor{20}"},
        // First arg signed
        BinaryData{"bool", "int_30", "OpUGreaterThan", "uint_20", "__bool",
                   AstFor("cast_int_30"), "greater_than",
                   "ScalarConstructor{20}"},
        // Second arg signed
        BinaryData{"bool", "uint_10", "OpUGreaterThan", "int_40", "__bool",
                   "ScalarConstructor{10}", "greater_than",
                   AstFor("cast_int_40")},
        // Vector, both unsigned
        BinaryData{"v2bool", "v2uint_10_20", "OpUGreaterThan", "v2uint_20_10",
                   "__vec_2__bool", AstFor("v2uint_10_20"), "greater_than",
                   AstFor("v2uint_20_10")},
        // First arg signed
        BinaryData{"v2bool", "v2int_30_40", "OpUGreaterThan", "v2uint_20_10",
                   "__vec_2__bool", AstFor("cast_v2int_30_40"), "greater_than",
                   AstFor("v2uint_20_10")},
        // Second arg signed
        BinaryData{"v2bool", "v2uint_10_20", "OpUGreaterThan", "v2int_40_30",
                   "__vec_2__bool", AstFor("v2uint_10_20"), "greater_than",
                   AstFor("cast_v2int_40_30")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_UGreaterThanEqual,
    SpvBinaryLogicalTest,
    ::testing::Values(
        // Both unsigned
        BinaryData{"bool", "uint_10", "OpUGreaterThanEqual", "uint_20",
                   "__bool", "ScalarConstructor{10}", "greater_than_equal",
                   "ScalarConstructor{20}"},
        // First arg signed
        BinaryData{"bool", "int_30", "OpUGreaterThanEqual", "uint_20", "__bool",
                   AstFor("cast_int_30"), "greater_than_equal",
                   "ScalarConstructor{20}"},
        // Second arg signed
        BinaryData{"bool", "uint_10", "OpUGreaterThanEqual", "int_40", "__bool",
                   "ScalarConstructor{10}", "greater_than_equal",
                   AstFor("cast_int_40")},
        // Vector, both unsigned
        BinaryData{"v2bool", "v2uint_10_20", "OpUGreaterThanEqual",
                   "v2uint_20_10", "__vec_2__bool", AstFor("v2uint_10_20"),
                   "greater_than_equal", AstFor("v2uint_20_10")},
        // First arg signed
        BinaryData{"v2bool", "v2int_30_40", "OpUGreaterThanEqual",
                   "v2uint_20_10", "__vec_2__bool", AstFor("cast_v2int_30_40"),
                   "greater_than_equal", AstFor("v2uint_20_10")},
        // Second arg signed
        BinaryData{"v2bool", "v2uint_10_20", "OpUGreaterThanEqual",
                   "v2int_40_30", "__vec_2__bool", AstFor("v2uint_10_20"),
                   "greater_than_equal", AstFor("cast_v2int_40_30")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_ULessThan,
    SpvBinaryLogicalTest,
    ::testing::Values(
        // Both unsigned
        BinaryData{"bool", "uint_10", "OpULessThan", "uint_20", "__bool",
                   "ScalarConstructor{10}", "less_than",
                   "ScalarConstructor{20}"},
        // First arg signed
        BinaryData{"bool", "int_30", "OpULessThan", "uint_20", "__bool",
                   AstFor("cast_int_30"), "less_than", "ScalarConstructor{20}"},
        // Second arg signed
        BinaryData{"bool", "uint_10", "OpULessThan", "int_40", "__bool",
                   "ScalarConstructor{10}", "less_than", AstFor("cast_int_40")},
        // Vector, both unsigned
        BinaryData{"v2bool", "v2uint_10_20", "OpULessThan", "v2uint_20_10",
                   "__vec_2__bool", AstFor("v2uint_10_20"), "less_than",
                   AstFor("v2uint_20_10")},
        // First arg signed
        BinaryData{"v2bool", "v2int_30_40", "OpULessThan", "v2uint_20_10",
                   "__vec_2__bool", AstFor("cast_v2int_30_40"), "less_than",
                   AstFor("v2uint_20_10")},
        // Second arg signed
        BinaryData{"v2bool", "v2uint_10_20", "OpULessThan", "v2int_40_30",
                   "__vec_2__bool", AstFor("v2uint_10_20"), "less_than",
                   AstFor("cast_v2int_40_30")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_ULessThanEqual,
    SpvBinaryLogicalTest,
    ::testing::Values(
        // Both unsigned
        BinaryData{"bool", "uint_10", "OpULessThanEqual", "uint_20", "__bool",
                   "ScalarConstructor{10}", "less_than_equal",
                   "ScalarConstructor{20}"},
        // First arg signed
        BinaryData{"bool", "int_30", "OpULessThanEqual", "uint_20", "__bool",
                   AstFor("cast_int_30"), "less_than_equal",
                   "ScalarConstructor{20}"},
        // Second arg signed
        BinaryData{"bool", "uint_10", "OpULessThanEqual", "int_40", "__bool",
                   "ScalarConstructor{10}", "less_than_equal",
                   AstFor("cast_int_40")},
        // Vector, both unsigned
        BinaryData{"v2bool", "v2uint_10_20", "OpULessThanEqual", "v2uint_20_10",
                   "__vec_2__bool", AstFor("v2uint_10_20"), "less_than_equal",
                   AstFor("v2uint_20_10")},
        // First arg signed
        BinaryData{"v2bool", "v2int_30_40", "OpULessThanEqual", "v2uint_20_10",
                   "__vec_2__bool", AstFor("cast_v2int_30_40"),
                   "less_than_equal", AstFor("v2uint_20_10")},
        // Second arg signed
        BinaryData{"v2bool", "v2uint_10_20", "OpULessThanEqual", "v2int_40_30",
                   "__vec_2__bool", AstFor("v2uint_10_20"), "less_than_equal",
                   AstFor("cast_v2int_40_30")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_SGreaterThan,
    SpvBinaryLogicalTest,
    ::testing::Values(
        // Both signed
        BinaryData{"bool", "int_30", "OpSGreaterThan", "int_40", "__bool",
                   "ScalarConstructor{30}", "greater_than",
                   "ScalarConstructor{40}"},
        // First arg unsigned
        BinaryData{"bool", "uint_10", "OpSGreaterThan", "int_40", "__bool",
                   AstFor("cast_uint_10"), "greater_than",
                   "ScalarConstructor{40}"},
        // Second arg unsigned
        BinaryData{"bool", "int_30", "OpSGreaterThan", "uint_20", "__bool",
                   "ScalarConstructor{30}", "greater_than",
                   AstFor("cast_uint_20")},
        // Vector, both signed
        BinaryData{"v2bool", "v2int_30_40", "OpSGreaterThan", "v2int_40_30",
                   "__vec_2__bool", AstFor("v2int_30_40"), "greater_than",
                   AstFor("v2int_40_30")},
        // First arg unsigned
        BinaryData{"v2bool", "v2uint_10_20", "OpSGreaterThan", "v2int_40_30",
                   "__vec_2__bool", AstFor("cast_v2uint_10_20"), "greater_than",
                   AstFor("v2int_40_30")},
        // Second arg unsigned
        BinaryData{"v2bool", "v2int_30_40", "OpSGreaterThan", "v2uint_20_10",
                   "__vec_2__bool", AstFor("v2int_30_40"), "greater_than",
                   AstFor("cast_v2uint_20_10")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_SGreaterThanEqual,
    SpvBinaryLogicalTest,
    ::testing::Values(
        // Both signed
        BinaryData{"bool", "int_30", "OpSGreaterThanEqual", "int_40", "__bool",
                   "ScalarConstructor{30}", "greater_than_equal",
                   "ScalarConstructor{40}"},
        // First arg unsigned
        BinaryData{"bool", "uint_10", "OpSGreaterThanEqual", "int_40", "__bool",
                   AstFor("cast_uint_10"), "greater_than_equal",
                   "ScalarConstructor{40}"},
        // Second arg unsigned
        BinaryData{"bool", "int_30", "OpSGreaterThanEqual", "uint_20", "__bool",
                   "ScalarConstructor{30}", "greater_than_equal",
                   AstFor("cast_uint_20")},
        // Vector, both signed
        BinaryData{"v2bool", "v2int_30_40", "OpSGreaterThanEqual",
                   "v2int_40_30", "__vec_2__bool", AstFor("v2int_30_40"),
                   "greater_than_equal", AstFor("v2int_40_30")},
        // First arg unsigned
        BinaryData{"v2bool", "v2uint_10_20", "OpSGreaterThanEqual",
                   "v2int_40_30", "__vec_2__bool", AstFor("cast_v2uint_10_20"),
                   "greater_than_equal", AstFor("v2int_40_30")},
        // Second arg unsigned
        BinaryData{"v2bool", "v2int_30_40", "OpSGreaterThanEqual",
                   "v2uint_20_10", "__vec_2__bool", AstFor("v2int_30_40"),
                   "greater_than_equal", AstFor("cast_v2uint_20_10")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_SLessThan,
    SpvBinaryLogicalTest,
    ::testing::Values(
        // Both signed
        BinaryData{"bool", "int_30", "OpSLessThan", "int_40", "__bool",
                   "ScalarConstructor{30}", "less_than",
                   "ScalarConstructor{40}"},
        // First arg unsigned
        BinaryData{"bool", "uint_10", "OpSLessThan", "int_40", "__bool",
                   AstFor("cast_uint_10"), "less_than",
                   "ScalarConstructor{40}"},
        // Second arg unsigned
        BinaryData{"bool", "int_30", "OpSLessThan", "uint_20", "__bool",
                   "ScalarConstructor{30}", "less_than",
                   AstFor("cast_uint_20")},
        // Vector, both signed
        BinaryData{"v2bool", "v2int_30_40", "OpSLessThan", "v2int_40_30",
                   "__vec_2__bool", AstFor("v2int_30_40"), "less_than",
                   AstFor("v2int_40_30")},
        // First arg unsigned
        BinaryData{"v2bool", "v2uint_10_20", "OpSLessThan", "v2int_40_30",
                   "__vec_2__bool", AstFor("cast_v2uint_10_20"), "less_than",
                   AstFor("v2int_40_30")},
        // Second arg unsigned
        BinaryData{"v2bool", "v2int_30_40", "OpSLessThan", "v2uint_20_10",
                   "__vec_2__bool", AstFor("v2int_30_40"), "less_than",
                   AstFor("cast_v2uint_20_10")}));

INSTANTIATE_TEST_SUITE_P(
    SpvParserTest_SLessThanEqual,
    SpvBinaryLogicalTest,
    ::testing::Values(
        // Both signed
        BinaryData{"bool", "int_30", "OpSLessThanEqual", "int_40", "__bool",
                   "ScalarConstructor{30}", "less_than_equal",
                   "ScalarConstructor{40}"},
        // First arg unsigned
        BinaryData{"bool", "uint_10", "OpSLessThanEqual", "int_40", "__bool",
                   AstFor("cast_uint_10"), "less_than_equal",
                   "ScalarConstructor{40}"},
        // Second arg unsigned
        BinaryData{"bool", "int_30", "OpSLessThanEqual", "uint_20", "__bool",
                   "ScalarConstructor{30}", "less_than_equal",
                   AstFor("cast_uint_20")},
        // Vector, both signed
        BinaryData{"v2bool", "v2int_30_40", "OpSLessThanEqual", "v2int_40_30",
                   "__vec_2__bool", AstFor("v2int_30_40"), "less_than_equal",
                   AstFor("v2int_40_30")},
        // First arg unsigned
        BinaryData{"v2bool", "v2uint_10_20", "OpSLessThanEqual", "v2int_40_30",
                   "__vec_2__bool", AstFor("cast_v2uint_10_20"),
                   "less_than_equal", AstFor("v2int_40_30")},
        // Second arg unsigned
        BinaryData{"v2bool", "v2int_30_40", "OpSLessThanEqual", "v2uint_20_10",
                   "__vec_2__bool", AstFor("v2int_30_40"), "less_than_equal",
                   AstFor("cast_v2uint_20_10")}));

// TODO(dneto): OpAny  - likely builtin function TBD
// TODO(dneto): OpAll  - likely builtin function TBD
// TODO(dneto): OpIsNan - likely builtin function TBD
// TODO(dneto): OpIsInf - likely builtin function TBD
// TODO(dneto): Kernel-guarded instructions.
// TODO(dneto): OpSelect - likely builtin function TBD
//
// Unordered float inequalities: blocked pending the resolution of
// https://github.com/gpuweb/gpuweb/issues/706
// TODO(dneto): OpFUnordEqual
// TODO(dneto): OpFUnordNotEqual
// TODO(dneto): OpFUnordLessThan
// TODO(dneto): OpFUnordGreaterThan
// TODO(dneto): OpFUnordLessThanEqual
// TODO(dneto): OpFUnordGreaterThanEqual

}  // namespace
}  // namespace spirv
}  // namespace reader
}  // namespace tint
