diff options
Diffstat (limited to 'tools/unit-test')
| -rw-r--r-- | tools/unit-test/slang-unit-test.cpp | 48 | ||||
| -rw-r--r-- | tools/unit-test/slang-unit-test.h | 38 |
2 files changed, 86 insertions, 0 deletions
diff --git a/tools/unit-test/slang-unit-test.cpp b/tools/unit-test/slang-unit-test.cpp new file mode 100644 index 000000000..a31614c05 --- /dev/null +++ b/tools/unit-test/slang-unit-test.cpp @@ -0,0 +1,48 @@ +#include "slang-unit-test.h" +#include "slang.h" +#include "source/core/slang-basic.h" + +struct SlangUnitTest +{ + const char* name; + slang::UnitTestFunc func; +}; + +class SlangUnitTestModule : public slang::IUnitTestModule +{ +public: + Slang::List<SlangUnitTest> tests; + + virtual SlangInt getTestCount() override + { + return tests.getCount(); + } + virtual const char* getTestName(SlangInt index) override + { + return tests[index].name; + } + + virtual slang::UnitTestFunc getTestFunc(SlangInt index) override + { + return tests[index].func; + } +}; + +SlangUnitTestModule* _getTestModule() +{ + static SlangUnitTestModule testModule; + return &testModule; +} + +extern "C" +{ +SLANG_DLL_EXPORT slang::IUnitTestModule* slangUnitTestGetModule() +{ + return _getTestModule(); +} +} + +slang::UnitTestRegisterHelper::UnitTestRegisterHelper(const char* name, UnitTestFunc testFunc) +{ + _getTestModule()->tests.add(SlangUnitTest{ name, testFunc }); +} diff --git a/tools/unit-test/slang-unit-test.h b/tools/unit-test/slang-unit-test.h new file mode 100644 index 000000000..7651e6b46 --- /dev/null +++ b/tools/unit-test/slang-unit-test.h @@ -0,0 +1,38 @@ +#pragma once + +#include "slang.h" +#include "source/core/slang-render-api-util.h" + +namespace slang +{ + struct UnitTestContext + { + slang::IGlobalSession* slangGlobalSession; + const char* workDirectory; + ISlangWriter* outputWriter; + Slang::RenderApiFlags enabledApis; + }; + + typedef SlangResult (*UnitTestFunc)(UnitTestContext*); + + class IUnitTestModule + { + public: + virtual SlangInt getTestCount() = 0; + virtual const char* getTestName(SlangInt index) = 0; + virtual UnitTestFunc getTestFunc(SlangInt index) = 0; + }; + + class UnitTestRegisterHelper + { + public: + UnitTestRegisterHelper(const char* name, UnitTestFunc testFunc); + }; + + typedef slang::IUnitTestModule* (*UnitTestGetModuleFunc)(); + +#define SLANG_UNIT_TEST(name) \ + SlangResult name(slang::UnitTestContext* context); \ + slang::UnitTestRegisterHelper _##name##RegisterHelper(#name, name); \ + SlangResult name(slang::UnitTestContext* context) +} |
