Files
Patrick Hodoul a8dcfa09a1 Adsk Contrib - Add the support for processor caches (#1130)
* Adsk Contrib - Add processor caches and improve the context variable support

Signed-off-by: Patrick Hodoul <Patrick.Hodoul@autodesk.com>

* Fix merge issues with the Grading pull request

Signed-off-by: Patrick Hodoul <patrick.hodoul@autodesk.com>

* Follow up on conflicting merges

Signed-off-by: Patrick Hodoul <Patrick.Hodoul@autodesk.com>

* Some changes following the code review

Signed-off-by: Patrick Hodoul <Patrick.Hodoul@autodesk.com>
2020-09-22 11:54:13 -04:00

176 lines
6.7 KiB
C++

// SPDX-License-Identifier: BSD-3-Clause
// Copyright Contributors to the OpenColorIO Project.
#include <algorithm>
#include "Context.cpp"
#include "PathUtils.h"
#include "Platform.h"
#include "pystring/pystring.h"
#include "testutils/UnitTest.h"
namespace OCIO = OCIO_NAMESPACE;
#define STR(x) FIELD_STR(x)
#ifndef OCIO_SOURCE_DIR
static_assert(0, "OCIO_SOURCE_DIR should be defined by tests/cpu/CMakeLists.txt");
#endif // OCIO_SOURCE_DIR
static const std::string ociodir(STR(OCIO_SOURCE_DIR));
// Method to compare paths.
std::string SanitizePath(const char* path)
{
return { pystring::os::path::normpath(path) };
}
OCIO_ADD_TEST(Context, search_paths)
{
OCIO::ContextRcPtr con = OCIO::Context::Create();
OCIO_CHECK_EQUAL(con->getNumSearchPaths(), 0);
const std::string empty{ "" };
OCIO_CHECK_EQUAL(std::string(con->getSearchPath()), empty);
OCIO_CHECK_EQUAL(std::string(con->getSearchPath(42)), empty);
con->addSearchPath(empty.c_str());
OCIO_CHECK_EQUAL(con->getNumSearchPaths(), 0);
const std::string first{ "First" };
con->addSearchPath(first.c_str());
OCIO_CHECK_EQUAL(con->getNumSearchPaths(), 1);
OCIO_CHECK_EQUAL(std::string(con->getSearchPath()), first);
OCIO_CHECK_EQUAL(std::string(con->getSearchPath(0)), first);
con->clearSearchPaths();
OCIO_CHECK_EQUAL(con->getNumSearchPaths(), 0);
OCIO_CHECK_EQUAL(std::string(con->getSearchPath()), empty);
const std::string second{ "Second" };
const std::string firstSecond{ first + ":" + second };
con->addSearchPath(first.c_str());
con->addSearchPath(second.c_str());
OCIO_CHECK_EQUAL(con->getNumSearchPaths(), 2);
OCIO_CHECK_EQUAL(std::string(con->getSearchPath()), firstSecond);
OCIO_CHECK_EQUAL(std::string(con->getSearchPath(0)), first);
OCIO_CHECK_EQUAL(std::string(con->getSearchPath(1)), second);
con->addSearchPath(empty.c_str());
OCIO_CHECK_EQUAL(con->getNumSearchPaths(), 2);
con->setSearchPath(first.c_str());
OCIO_CHECK_EQUAL(con->getNumSearchPaths(), 1);
OCIO_CHECK_EQUAL(std::string(con->getSearchPath()), first);
OCIO_CHECK_EQUAL(std::string(con->getSearchPath(0)), first);
con->setSearchPath(firstSecond.c_str());
OCIO_CHECK_EQUAL(con->getNumSearchPaths(), 2);
OCIO_CHECK_EQUAL(std::string(con->getSearchPath()), firstSecond);
OCIO_CHECK_EQUAL(std::string(con->getSearchPath(0)), first);
OCIO_CHECK_EQUAL(std::string(con->getSearchPath(1)), second);
}
OCIO_ADD_TEST(Context, abs_path)
{
const std::string contextpath(ociodir + std::string("/src/OpenColorIO/Context.cpp"));
OCIO::ContextRcPtr con = OCIO::Context::Create();
con->addSearchPath(ociodir.c_str());
con->setStringVar("non_abs", "src/OpenColorIO/Context.cpp");
con->setStringVar("is_abs", contextpath.c_str());
OCIO_CHECK_NO_THROW(con->resolveFileLocation("${non_abs}"));
OCIO_CHECK_ASSERT(strcmp(SanitizePath(con->resolveFileLocation("${non_abs}")).c_str(),
SanitizePath(contextpath.c_str()).c_str()) == 0);
OCIO_CHECK_NO_THROW(con->resolveFileLocation("${is_abs}"));
OCIO_CHECK_ASSERT(strcmp(con->resolveFileLocation("${is_abs}"),
SanitizePath(contextpath.c_str()).c_str()) == 0);
}
OCIO_ADD_TEST(Context, var_search_path)
{
OCIO::ContextRcPtr context = OCIO::Context::Create();
const std::string contextpath(ociodir + std::string("/src/OpenColorIO/Context.cpp"));
context->setStringVar("SOURCE_DIR", ociodir.c_str());
context->addSearchPath("${SOURCE_DIR}/src/OpenColorIO");
std::string resolvedSource;
OCIO_CHECK_NO_THROW(resolvedSource = context->resolveFileLocation("Context.cpp"));
OCIO_CHECK_ASSERT(strcmp(SanitizePath(resolvedSource.c_str()).c_str(),
SanitizePath(contextpath.c_str()).c_str()) == 0);
}
OCIO_ADD_TEST(Context, use_searchpaths)
{
OCIO::ContextRcPtr context = OCIO::Context::Create();
// Add 2 absolute search paths.
const std::string searchPath1 = ociodir + "/src/OpenColorIO";
const std::string searchPath2 = ociodir + "/tests/gpu";
context->addSearchPath(searchPath1.c_str());
context->addSearchPath(searchPath2.c_str());
std::string resolvedSource;
OCIO_CHECK_NO_THROW(resolvedSource = context->resolveFileLocation("Context.cpp"));
const std::string res1 = searchPath1 + "/Context.cpp";
OCIO_CHECK_ASSERT(strcmp(SanitizePath(resolvedSource.c_str()).c_str(),
SanitizePath(res1.c_str()).c_str()) == 0);
OCIO_CHECK_NO_THROW(resolvedSource = context->resolveFileLocation("GPUHelpers.h"));
const std::string res2 = searchPath2 + "/GPUHelpers.h";
OCIO_CHECK_ASSERT(strcmp(SanitizePath(resolvedSource.c_str()).c_str(),
SanitizePath(res2.c_str()).c_str()) == 0);
}
OCIO_ADD_TEST(Context, use_searchpaths_workingdir)
{
OCIO::ContextRcPtr context = OCIO::Context::Create();
// Set working directory and add 2 relative search paths.
const std::string searchPath1 = "src/OpenColorIO";
const std::string searchPath2 = "tests/gpu";
context->setWorkingDir(ociodir.c_str());
context->addSearchPath(searchPath1.c_str());
context->addSearchPath(searchPath2.c_str());
std::string resolvedSource;
OCIO_CHECK_NO_THROW(resolvedSource = context->resolveFileLocation("Context.cpp"));
const std::string res1 = ociodir + "/" + searchPath1 + "/Context.cpp";
OCIO_CHECK_ASSERT(strcmp(SanitizePath(resolvedSource.c_str()).c_str(),
SanitizePath(res1.c_str()).c_str()) == 0);
OCIO_CHECK_NO_THROW(resolvedSource = context->resolveFileLocation("GPUHelpers.h"));
const std::string res2 = ociodir + "/" + searchPath2 + "/GPUHelpers.h";
OCIO_CHECK_ASSERT(strcmp(SanitizePath(resolvedSource.c_str()).c_str(),
SanitizePath(res2.c_str()).c_str()) == 0);
}
OCIO_ADD_TEST(Context, string_vars)
{
// Test Context::addStringVars().
OCIO::ContextRcPtr ctx1 = OCIO::Context::Create();
ctx1->setStringVar("var1", "val1");
ctx1->setStringVar("var2", "val2");
OCIO::ContextRcPtr ctx2 = OCIO::Context::Create();
ctx2->setStringVar("var1", "val11");
ctx2->setStringVar("var3", "val3");
OCIO::ConstContextRcPtr const_ctx2 = ctx2;
ctx1->addStringVars(const_ctx2);
OCIO_REQUIRE_EQUAL(3, ctx1->getNumStringVars());
OCIO_CHECK_EQUAL(std::string("var1"), ctx1->getStringVarNameByIndex(0));
OCIO_CHECK_EQUAL(std::string("val11"), ctx1->getStringVarByIndex(0));
OCIO_CHECK_EQUAL(std::string("var2"), ctx1->getStringVarNameByIndex(1));
OCIO_CHECK_EQUAL(std::string("val2"), ctx1->getStringVarByIndex(1));
OCIO_CHECK_EQUAL(std::string("var3"), ctx1->getStringVarNameByIndex(2));
OCIO_CHECK_EQUAL(std::string("val3"), ctx1->getStringVarByIndex(2));
}