#include "UnitSPIRV.h"
#include "ValidateFixtures.h"
+#include "gmock/gmock.h"
#include <sstream>
#include <string>
#include <utility>
+using ::testing::HasSubstr;
+
using std::string;
using std::pair;
using std::stringstream;
+
namespace {
using Validate =
spvtest::ValidateBase<pair<string, bool>, SPV_VALIDATE_SSA_BIT>;
-// Returns true if the substr is a substring of message
-bool ContainsString(const string &message, const string &substr) {
- return std::string::npos != message.find(substr);
-}
-
TEST_F(Validate, Default) {
char str[] = R"(
OpMemoryModel Logical GLSL450
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "missing"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("missing"));
}
TEST_F(Validate, IdRedefinedBad) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "not_dominant"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("not_dominant"));
}
TEST_F(Validate, ForwardNameGood) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "main"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("main"));
}
TEST_F(Validate, ForwardMemberNameGood) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "size"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("size"));
}
TEST_F(Validate, ForwardDecorateGood) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "missing"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("missing"));
}
TEST_F(Validate, ForwardMemberDecorateGood) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "missing"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("missing"));
}
TEST_F(Validate, ForwardGroupDecorateGood) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "missing"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("missing"));
}
TEST_F(Validate, ForwardGroupDecorateMissingTargetBad) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "missing"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("missing"));
}
TEST_F(Validate, ForwardGroupDecorateDecorationGroupDominateBad) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "group"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("group"));
}
TEST_F(Validate, ForwardDecorateInvalidIdBad) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "missing"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("missing"));
}
TEST_F(Validate, FunctionCallGood) {
%3 = OpTypeInt 32 0
%four = OpConstant %2 4
%five = OpConstant %3 5
+%8 = OpTypeFunction %1 %2 %3
%4 = OpTypeFunction %1
%5 = OpFunction %1 None %4
%6 = OpLabel
%7 = OpFunctionCall %1 %9 %four %five
OpFunctionEnd
-%8 = OpTypeFunction %1 %2 %3
%9 = OpFunction %1 None %8
%10 = OpFunctionParameter %2
%11 = OpFunctionParameter %3
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "conditional"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("conditional"));
}
TEST_F(Validate, ForwardBranchConditionalMissingTargetBad) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "missing"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("missing"));
}
+const string kHeader = R"(
+OpCapability Int8
+OpCapability DeviceEnqueue
+OpMemoryModel Logical GLSL450
+)";
+
const string kBasicTypes = R"(
- OpCapability Int8
- OpCapability DeviceEnqueue
- OpMemoryModel Logical GLSL450
%voidt = OpTypeVoid
%boolt = OpTypeBool
%int8t = OpTypeInt 8 0
)";
TEST_F(Validate, EnqueueKernelGood) {
- string str = kBasicTypes + kKernelTypesAndConstants + kKernelDefinition + R"(
+ string str = kHeader + kBasicTypes + kKernelTypesAndConstants +
+ kKernelDefinition + R"(
%main = OpFunction %voidt None %vfunct
%mainl = OpLabel
)" +
}
TEST_F(Validate, ForwardEnqueueKernelGood) {
- string str = kBasicTypes + kKernelTypesAndConstants + R"(
+ string str = kHeader + kBasicTypes + kKernelTypesAndConstants + R"(
%main = OpFunction %voidt None %vfunct
%mainl = OpLabel
)" +
}
TEST_F(Validate, EnqueueMissingFunctionBad) {
- string str = kBasicTypes + "OpName %kfunc \"kfunc\"" +
+ string str = kHeader + "OpName %kfunc \"kfunc\"" + kBasicTypes +
kKernelTypesAndConstants + R"(
%main = OpFunction %voidt None %vfunct
%mainl = OpLabel
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "kfunc"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("kfunc"));
}
string forwardKernelNonDominantParameterBaseCode(string name = string()) {
} else {
op_name = "\nOpName %" + name + " \"" + name + "\"\n";
}
- string out = kBasicTypes + op_name + kKernelTypesAndConstants +
+ string out = kHeader + op_name + kBasicTypes + kKernelTypesAndConstants +
kKernelDefinition +
R"(
%main = OpFunction %voidt None %vfunct
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "missing"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("missing"));
}
TEST_F(Validate, ForwardEnqueueKernelNonDominantParameter2Bad) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "dqueue2"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("dqueue2"));
}
TEST_F(Validate, ForwardEnqueueKernelNonDominantParameter3Bad) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "ndval2"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("ndval2"));
}
TEST_F(Validate, ForwardEnqueueKernelNonDominantParameter4Bad) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "nevent2"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("nevent2"));
}
TEST_F(Validate, ForwardEnqueueKernelNonDominantParameter5Bad) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "event2"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("event2"));
}
TEST_F(Validate, ForwardEnqueueKernelNonDominantParameter6Bad) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "revent2"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("revent2"));
}
TEST_F(Validate, ForwardEnqueueKernelNonDominantParameter8Bad) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "firstp2"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("firstp2"));
}
TEST_F(Validate, ForwardEnqueueKernelNonDominantParameter9Bad) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "psize2"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("psize2"));
}
TEST_F(Validate, ForwardEnqueueKernelNonDominantParameter10Bad) {
)";
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "palign2"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("palign2"));
}
TEST_F(Validate, ForwardEnqueueKernelNonDominantParameter11Bad) {
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "lsize2"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("lsize2"));
}
static const bool kWithNDrange = true;
string ndrange_param = with_ndrange ? " %ndval " : " ";
// clang-format off
- string str = kBasicTypes + kKernelTypesAndConstants +
+ string str = kHeader + kBasicTypes + kKernelTypesAndConstants +
R"(
%main = OpFunction %voidt None %vfunct
)"
CompileSuccessfully(ss.str());
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "missing"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("missing"));
}
TEST_P(Validate, ForwardGetKernelNDrangeSubGroupCountMissingParameter1Bad) {
CompileSuccessfully(ss.str());
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "missing"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("missing"));
}
TEST_P(Validate, ForwardGetKernelNDrangeSubGroupCountNonDominantParameter2Bad) {
if (GetParam().second) {
CompileSuccessfully(ss.str());
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "ndval2"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("ndval2"));
}
}
CompileSuccessfully(ss.str());
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "firstp2"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("firstp2"));
}
TEST_P(Validate, ForwardGetKernelNDrangeSubGroupCountNonDominantParameter5Bad) {
CompileSuccessfully(ss.str());
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "psize2"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("psize2"));
}
TEST_P(Validate, ForwardGetKernelNDrangeSubGroupCountNonDominantParameter6Bad) {
if (GetParam().second) {
CompileSuccessfully(ss.str());
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "palign2"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("palign2"));
}
}
TEST_F(Validate, PhiGood) {
- string str = kBasicTypes +
+ string str = kHeader + kBasicTypes +
R"(
%zero = OpConstant %intt 0
%one = OpConstant %intt 1
}
TEST_F(Validate, PhiMissingTypeBad) {
- string str = kBasicTypes +
+ string str = kHeader + "OpName %missing \"missing\"" + kBasicTypes +
R"(
- OpName %missing "missing"
%zero = OpConstant %intt 0
%one = OpConstant %intt 1
%ten = OpConstant %intt 10
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "missing"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("missing"));
}
TEST_F(Validate, PhiMissingIdBad) {
- string str = kBasicTypes +
+ string str = kHeader + "OpName %missing \"missing\"" + kBasicTypes +
R"(
- OpName %missing "missing"
%zero = OpConstant %intt 0
%one = OpConstant %intt 1
%ten = OpConstant %intt 10
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "missing"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("missing"));
}
TEST_F(Validate, PhiMissingLabelBad) {
- string str = kBasicTypes +
+ string str = kHeader + "OpName %missing \"missing\"" + kBasicTypes +
R"(
- OpName %missing "missing"
%zero = OpConstant %intt 0
%one = OpConstant %intt 1
%ten = OpConstant %intt 10
CompileSuccessfully(str);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions());
- ASSERT_TRUE(ContainsString(getDiagnosticString(), "missing"));
+ EXPECT_THAT(getDiagnosticString(), HasSubstr("missing"));
}
// TODO(umar): OpGroupMemberDecorate