123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- ///////////////////////////////////////////////////////////////////////////////
- // //
- // VerifierTest.cpp //
- // Copyright (C) Microsoft Corporation. All rights reserved. //
- // This file is distributed under the University of Illinois Open Source //
- // License. See LICENSE.TXT for details. //
- // //
- // //
- ///////////////////////////////////////////////////////////////////////////////
- #include <memory>
- #include <vector>
- #include <string>
- #include "dxc/Test/CompilationResult.h"
- #include "dxc/Test/HLSLTestData.h"
- #include <fstream>
- #ifdef _WIN32
- #include "WexTestClass.h"
- #define TEST_CLASS_DERIVATION
- #else
- #define TEST_CLASS_DERIVATION : public ::testing::Test
- #endif
- #include "dxc/Test/HlslTestUtils.h"
- using namespace std;
- // The test fixture.
- class VerifierTest TEST_CLASS_DERIVATION {
- public:
- BEGIN_TEST_CLASS(VerifierTest)
- TEST_CLASS_PROPERTY(L"Parallel", L"true")
- TEST_METHOD_PROPERTY(L"Priority", L"0")
- END_TEST_CLASS()
- TEST_METHOD(RunArrayIndexOutOfBounds)
- TEST_METHOD(RunArrayLength)
- TEST_METHOD(RunAttributes)
- TEST_METHOD(RunBuiltinTypesNoInheritance)
- TEST_METHOD(RunConstExpr)
- TEST_METHOD(RunConstAssign)
- TEST_METHOD(RunConstDefault)
- TEST_METHOD(RunConversionsBetweenTypeShapes)
- TEST_METHOD(RunConversionsNonNumericAggregates)
- TEST_METHOD(RunCppErrors)
- TEST_METHOD(RunCppErrorsHV2015)
- TEST_METHOD(RunCXX11Attributes)
- TEST_METHOD(RunEnums)
- TEST_METHOD(RunFunctions)
- TEST_METHOD(RunIncompleteType)
- TEST_METHOD(RunIndexingOperator)
- TEST_METHOD(RunIntrinsicExamples)
- TEST_METHOD(RunMatrixAssignments)
- TEST_METHOD(RunMatrixSyntax)
- TEST_METHOD(RunMatrixSyntaxExactPrecision)
- TEST_METHOD(RunMintypesPromotionWarnings)
- TEST_METHOD(RunMoreOperators)
- TEST_METHOD(RunObjectOperators)
- TEST_METHOD(RunPackReg)
- TEST_METHOD(RunRayTracings)
- TEST_METHOD(RunScalarAssignments)
- TEST_METHOD(RunScalarAssignmentsExactPrecision)
- TEST_METHOD(RunScalarOperatorsAssign)
- TEST_METHOD(RunScalarOperatorsAssignExactPrecision)
- TEST_METHOD(RunScalarOperators)
- TEST_METHOD(RunScalarOperatorsExactPrecision)
- TEST_METHOD(RunSizeof)
- TEST_METHOD(RunString)
- TEST_METHOD(RunStructAssignments)
- TEST_METHOD(RunSubobjects)
- TEST_METHOD(RunIncompleteArray)
- TEST_METHOD(RunTemplateChecks)
- TEST_METHOD(RunVarmodsSyntax)
- TEST_METHOD(RunVectorAssignments)
- TEST_METHOD(RunVectorSyntaxMix)
- TEST_METHOD(RunVectorSyntax)
- TEST_METHOD(RunVectorSyntaxExactPrecision)
- TEST_METHOD(RunTypemodsSyntax)
- TEST_METHOD(RunSemantics)
- TEST_METHOD(RunImplicitCasts)
- TEST_METHOD(RunDerivedToBaseCasts)
- TEST_METHOD(RunLiterals)
- TEST_METHOD(RunEffectsSyntax)
- TEST_METHOD(RunVectorConditional)
- TEST_METHOD(RunUint4Add3)
- TEST_METHOD(RunBadInclude)
- TEST_METHOD(RunWave)
- TEST_METHOD(RunBinopDims)
- void CheckVerifies(const wchar_t* path) {
- WEX::TestExecution::SetVerifyOutput verifySettings(WEX::TestExecution::VerifyOutputSettings::LogOnlyFailures);
- const char startMarker[] = "%clang_cc1";
- const char endMarker[] = "%s";
- char firstLine[200];
- memset(firstLine, 0, sizeof(firstLine));
- char* commandLine;
- //
- // Very simple processing for now.
- // See utils\lit\lit\TestRunner.py for the more thorough implementation.
- //
- // The first line for HLSL tests will always look like this:
- // // RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -ffreestanding -verify %s
- //
- // We turn this into ' -fsyntax-only -Wno-unused-value -ffreestanding -verify ' by offseting after %clang_cc1
- // and chopping off everything after '%s'.
- //
- {
- ifstream infile(CW2A(path).m_psz);
- ASSERT_EQ(false, infile.bad());
- infile.getline(firstLine, _countof(firstLine));
- char* found = strstr(firstLine, startMarker);
- ASSERT_NE(nullptr, found);
- commandLine = found + strlen(startMarker);
- char* fileArgument = strstr(commandLine, endMarker);
- ASSERT_NE(nullptr, fileArgument);
- *fileArgument = '\0';
- }
- CW2A asciiPath(path);
- CompilationResult result = CompilationResult::CreateForCommandLine(commandLine, asciiPath);
- if (!result.ParseSucceeded()) {
- std::stringstream ss;
- ss << "for program " << asciiPath << " with errors:\n" << result.GetTextForErrors();
- CA2W pszW(ss.str().c_str());
- ::WEX::Logging::Log::Comment(pszW);
- }
- VERIFY_IS_TRUE(result.ParseSucceeded());
- }
- void CheckVerifiesHLSL(LPCWSTR name) {
- // Having a test per file makes it very easy to filter from the command line.
- CheckVerifies(hlsl_test::GetPathToHlslDataFile(name).c_str());
- }
- };
- TEST_F(VerifierTest, RunArrayIndexOutOfBounds) {
- CheckVerifiesHLSL(L"array-index-out-of-bounds.hlsl");
- CheckVerifiesHLSL(L"array-index-out-of-bounds-HV-2016.hlsl");
- }
- TEST_F(VerifierTest, RunArrayLength) {
- CheckVerifiesHLSL(L"array-length.hlsl");
- }
- TEST_F(VerifierTest, RunAttributes) {
- CheckVerifiesHLSL(L"attributes.hlsl");
- }
- TEST_F(VerifierTest, RunBuiltinTypesNoInheritance) {
- CheckVerifiesHLSL(L"builtin-types-no-inheritance.hlsl");
- }
- TEST_F(VerifierTest, RunConstExpr) {
- CheckVerifiesHLSL(L"const-expr.hlsl");
- }
- TEST_F(VerifierTest, RunConstAssign) {
- CheckVerifiesHLSL(L"const-assign.hlsl");
- }
- TEST_F(VerifierTest, RunConstDefault) {
- CheckVerifiesHLSL(L"const-default.hlsl");
- }
- TEST_F(VerifierTest, RunConversionsBetweenTypeShapes) {
- CheckVerifiesHLSL(L"conversions-between-type-shapes.hlsl");
- }
- TEST_F(VerifierTest, RunConversionsNonNumericAggregates) {
- CheckVerifiesHLSL(L"conversions-non-numeric-aggregates.hlsl");
- }
- TEST_F(VerifierTest, RunCppErrors) {
- CheckVerifiesHLSL(L"cpp-errors.hlsl");
- }
- TEST_F(VerifierTest, RunCppErrorsHV2015) {
- CheckVerifiesHLSL(L"cpp-errors-hv2015.hlsl");
- }
- TEST_F(VerifierTest, RunCXX11Attributes) {
- CheckVerifiesHLSL(L"cxx11-attributes.hlsl");
- }
- TEST_F(VerifierTest, RunEnums) {
- CheckVerifiesHLSL(L"enums.hlsl");
- }
- TEST_F(VerifierTest, RunFunctions) {
- CheckVerifiesHLSL(L"functions.hlsl");
- }
- TEST_F(VerifierTest, RunIncompleteType) {
- CheckVerifiesHLSL(L"incomplete-type.hlsl");
- }
- TEST_F(VerifierTest, RunIndexingOperator) {
- CheckVerifiesHLSL(L"indexing-operator.hlsl");
- }
- TEST_F(VerifierTest, RunIntrinsicExamples) {
- CheckVerifiesHLSL(L"intrinsic-examples.hlsl");
- }
- TEST_F(VerifierTest, RunMatrixAssignments) {
- CheckVerifiesHLSL(L"matrix-assignments.hlsl");
- }
- TEST_F(VerifierTest, RunMatrixSyntax) {
- CheckVerifiesHLSL(L"matrix-syntax.hlsl");
- }
- TEST_F(VerifierTest, RunMatrixSyntaxExactPrecision) {
- CheckVerifiesHLSL(L"matrix-syntax-exact-precision.hlsl");
- }
- TEST_F(VerifierTest, RunMintypesPromotionWarnings) {
- CheckVerifiesHLSL(L"mintypes-promotion-warnings.hlsl");
- }
- TEST_F(VerifierTest, RunMoreOperators) {
- CheckVerifiesHLSL(L"more-operators.hlsl");
- }
- TEST_F(VerifierTest, RunObjectOperators) {
- CheckVerifiesHLSL(L"object-operators.hlsl");
- }
- TEST_F(VerifierTest, RunPackReg) {
- CheckVerifiesHLSL(L"packreg.hlsl");
- }
- TEST_F(VerifierTest, RunRayTracings) {
- CheckVerifiesHLSL(L"raytracings.hlsl");
- }
- TEST_F(VerifierTest, RunScalarAssignments) {
- CheckVerifiesHLSL(L"scalar-assignments.hlsl");
- }
- TEST_F(VerifierTest, RunScalarAssignmentsExactPrecision) {
- CheckVerifiesHLSL(L"scalar-assignments-exact-precision.hlsl");
- }
- TEST_F(VerifierTest, RunScalarOperatorsAssign) {
- CheckVerifiesHLSL(L"scalar-operators-assign.hlsl");
- }
- TEST_F(VerifierTest, RunScalarOperatorsAssignExactPrecision) {
- CheckVerifiesHLSL(L"scalar-operators-assign-exact-precision.hlsl");
- }
- TEST_F(VerifierTest, RunScalarOperators) {
- CheckVerifiesHLSL(L"scalar-operators.hlsl");
- }
- TEST_F(VerifierTest, RunScalarOperatorsExactPrecision) {
- CheckVerifiesHLSL(L"scalar-operators-exact-precision.hlsl");
- }
- TEST_F(VerifierTest, RunSizeof) {
- CheckVerifiesHLSL(L"sizeof.hlsl");
- }
- TEST_F(VerifierTest, RunString) {
- CheckVerifiesHLSL(L"string.hlsl");
- }
- TEST_F(VerifierTest, RunStructAssignments) {
- CheckVerifiesHLSL(L"struct-assignments.hlsl");
- }
- TEST_F(VerifierTest, RunSubobjects) {
- CheckVerifiesHLSL(L"subobjects-syntax.hlsl");
- }
- TEST_F(VerifierTest, RunIncompleteArray) {
- CheckVerifiesHLSL(L"incomp_array_err.hlsl");
- }
- TEST_F(VerifierTest, RunTemplateChecks) {
- CheckVerifiesHLSL(L"template-checks.hlsl");
- }
- TEST_F(VerifierTest, RunVarmodsSyntax) {
- CheckVerifiesHLSL(L"varmods-syntax.hlsl");
- }
- TEST_F(VerifierTest, RunVectorAssignments) {
- CheckVerifiesHLSL(L"vector-assignments.hlsl");
- }
- TEST_F(VerifierTest, RunVectorSyntaxMix) {
- CheckVerifiesHLSL(L"vector-syntax-mix.hlsl");
- }
- TEST_F(VerifierTest, RunVectorSyntax) {
- CheckVerifiesHLSL(L"vector-syntax.hlsl");
- }
- TEST_F(VerifierTest, RunVectorSyntaxExactPrecision) {
- CheckVerifiesHLSL(L"vector-syntax-exact-precision.hlsl");
- }
- TEST_F(VerifierTest, RunTypemodsSyntax) {
- CheckVerifiesHLSL(L"typemods-syntax.hlsl");
- }
- TEST_F(VerifierTest, RunSemantics) {
- CheckVerifiesHLSL(L"semantics.hlsl");
- }
- TEST_F(VerifierTest, RunImplicitCasts) {
- CheckVerifiesHLSL(L"implicit-casts.hlsl");
- }
- TEST_F(VerifierTest, RunDerivedToBaseCasts) {
- CheckVerifiesHLSL(L"derived-to-base.hlsl");
- }
- TEST_F(VerifierTest, RunLiterals) {
- CheckVerifiesHLSL(L"literals.hlsl");
- }
- TEST_F(VerifierTest, RunEffectsSyntax) {
- CheckVerifiesHLSL(L"effects-syntax.hlsl");
- }
- TEST_F(VerifierTest, RunVectorConditional) {
- CheckVerifiesHLSL(L"vector-conditional.hlsl");
- }
- TEST_F(VerifierTest, RunUint4Add3) {
- CheckVerifiesHLSL(L"uint4_add3.hlsl");
- }
- TEST_F(VerifierTest, RunBadInclude) {
- CheckVerifiesHLSL(L"bad-include.hlsl");
- }
- TEST_F(VerifierTest, RunWave) {
- CheckVerifiesHLSL(L"wave.hlsl");
- }
- TEST_F(VerifierTest, RunBinopDims) {
- CheckVerifiesHLSL(L"binop-dims.hlsl");
- }
|