compute-runtime/unit_tests/utilities/debug_file_reader_tests.cpp

171 lines
7.0 KiB
C++

/*
* Copyright (c) 2017 - 2018, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
#include "test.h"
#include "gtest/gtest.h"
#include "runtime/helpers/file_io.h"
#include "runtime/utilities/debug_file_reader.h"
#include <memory>
#include <string>
using namespace OCLRT;
using namespace std;
class TestSettingsFileReader : public SettingsFileReader {
public:
TestSettingsFileReader(const char *filePath = nullptr) : SettingsFileReader(filePath) {
}
~TestSettingsFileReader() override {
}
size_t getValueSettingsCount() {
return settingValueMap.size();
}
size_t getStringSettingsCount() {
return settingStringMap.size();
}
public:
static const char *testPath;
static const char *stringTestPath;
};
const char *TestSettingsFileReader::testPath = "./test_files/igdrcl.config";
const char *TestSettingsFileReader::stringTestPath = "./test_files/igdrcl_string.config";
TEST(SettingsFileReader, CreateFileReaderWithoutFile) {
bool settingsFileExists = fileExists(SettingsReader::settingsFileName);
// if settings file exists, remove it
if (settingsFileExists) {
remove(SettingsReader::settingsFileName);
}
// Use current location for file read
std::unique_ptr<TestSettingsFileReader> reader = unique_ptr<TestSettingsFileReader>(new TestSettingsFileReader());
ASSERT_NE(nullptr, reader);
EXPECT_EQ(0u, reader->getValueSettingsCount());
EXPECT_EQ(0u, reader->getStringSettingsCount());
}
TEST(SettingsFileReader, givenTestFileWithDefaultValuesWhenTheyAreQueriedThenDefaultValuesMatch) {
// Use test settings file
std::unique_ptr<TestSettingsFileReader> reader = unique_ptr<TestSettingsFileReader>(new TestSettingsFileReader(TestSettingsFileReader::testPath));
ASSERT_NE(nullptr, reader);
size_t debugVariableCount = 0;
bool compareSuccessful = false;
#define DECLARE_DEBUG_VARIABLE(dataType, variableName, defaultValue, description) \
compareSuccessful = defaultValue == reader->getSetting(#variableName, defaultValue); \
EXPECT_TRUE(compareSuccessful) << #variableName; \
debugVariableCount++;
#include "runtime/os_interface/DebugVariables.inl"
#undef DECLARE_DEBUG_VARIABLE
size_t mapCount = reader->getValueSettingsCount() + reader->getStringSettingsCount();
EXPECT_EQ(mapCount, debugVariableCount);
}
TEST(SettingsFileReader, GetSetting) {
// Use test settings file
std::unique_ptr<TestSettingsFileReader> reader = unique_ptr<TestSettingsFileReader>(new TestSettingsFileReader(TestSettingsFileReader::testPath));
ASSERT_NE(nullptr, reader);
#define DECLARE_DEBUG_VARIABLE(dataType, variableName, defaultValue, description) \
{ \
dataType defaultData = defaultValue; \
dataType tempData = reader->getSetting(#variableName, defaultData); \
if (tempData == defaultData) { \
EXPECT_TRUE(true); \
} \
}
#include "runtime/os_interface/DebugVariables.inl"
#undef DECLARE_DEBUG_VARIABLE
}
TEST(SettingsFileReader, GetStringSettingFromFile) {
// Use test settings file
std::unique_ptr<TestSettingsFileReader> reader = unique_ptr<TestSettingsFileReader>(new TestSettingsFileReader(TestSettingsFileReader::stringTestPath));
ASSERT_NE(nullptr, reader);
string retValue;
// StringTestKey is defined in file: unit_tests\helpers\TestDebugVariables.inl
string returnedStringValue = reader->getSetting("StringTestKey", retValue);
// "Test Value" is a value that should be read from file defined in stringTestPath member
EXPECT_STREQ(returnedStringValue.c_str(), "TestValue");
#define DECLARE_DEBUG_VARIABLE(dataType, variableName, defaultValue, description) \
{ \
dataType defaultData = defaultValue; \
dataType tempData = reader->getSetting(#variableName, defaultData); \
if (tempData == defaultData) { \
EXPECT_TRUE(true); \
} \
}
#include "unit_tests/helpers/TestDebugVariables.inl"
#undef DECLARE_DEBUG_VARIABLE
}
TEST(SettingsFileReader, givenDebugFileSettingInWhichStringIsFollowedByIntegerWhenItIsParsedThenProperValuesAreObtained) {
std::unique_ptr<TestSettingsFileReader> reader(new TestSettingsFileReader(TestSettingsFileReader::stringTestPath));
ASSERT_NE(nullptr, reader.get());
int32_t retValue = 0;
int32_t returnedIntValue = reader->getSetting("IntTestKey", retValue);
EXPECT_EQ(1, returnedIntValue);
string retValueString;
string returnedStringValue = reader->getSetting("StringTestKey", retValueString);
EXPECT_STREQ(returnedStringValue.c_str(), "TestValue");
}
TEST(SettingsFileReader, GetSettingWhenNotInFile) {
// Use test settings file
std::unique_ptr<TestSettingsFileReader> reader = unique_ptr<TestSettingsFileReader>(new TestSettingsFileReader(TestSettingsFileReader::testPath));
ASSERT_NE(nullptr, reader);
bool defaultBoolValue = false;
bool returnedBoolValue = reader->getSetting("BoolSettingNotExistingInFile", defaultBoolValue);
EXPECT_EQ(defaultBoolValue, returnedBoolValue);
int32_t defaultIntValue = 123;
int32_t returnedIntValue = reader->getSetting("IntSettingNotExistingInFile", defaultIntValue);
EXPECT_EQ(defaultIntValue, returnedIntValue);
string defaultStringValue = "ABCD";
string returnedStringValue = reader->getSetting("StringSettingNotExistingInFile", defaultStringValue);
EXPECT_EQ(defaultStringValue, returnedStringValue);
}