aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorsurmeh01 <surabhi.mehta@arm.com>2018-03-29 16:33:54 +0100
committersurmeh01 <surabhi.mehta@arm.com>2018-03-29 16:33:54 +0100
commit7666005c72227a3ea5c410ca2861c9b6620887d8 (patch)
tree084296e0ba923f7885b8efb242335a4547b2cdb0 /test
parent5307bc10ac488261e84ac76b2dede6039ea3fe96 (diff)
downloadandroid-nn-driver-7666005c72227a3ea5c410ca2861c9b6620887d8.tar.gz
Release 18.03
Diffstat (limited to 'test')
-rw-r--r--test/Android.mk3
-rw-r--r--[-rwxr-xr-x]test/Tests.cpp2
-rw-r--r--test/UtilsTests.cpp261
3 files changed, 263 insertions, 3 deletions
diff --git a/test/Android.mk b/test/Android.mk
index 7a718afa..95de4617 100644
--- a/test/Android.mk
+++ b/test/Android.mk
@@ -27,7 +27,8 @@ LOCAL_CFLAGS := \
-UNDEBUG
LOCAL_SRC_FILES := \
- Tests.cpp
+ Tests.cpp \
+ UtilsTests.cpp
LOCAL_STATIC_LIBRARIES := \
libarmnn-driver \
diff --git a/test/Tests.cpp b/test/Tests.cpp
index 5f3dd6f6..0ab2908b 100755..100644
--- a/test/Tests.cpp
+++ b/test/Tests.cpp
@@ -194,8 +194,6 @@ private:
sp<IPreparedModel> m_PreparedModel;
};
-
-
// lifted from common/Utils.cpp
hidl_memory allocateSharedMemory(int64_t size)
{
diff --git a/test/UtilsTests.cpp b/test/UtilsTests.cpp
new file mode 100644
index 00000000..49941e56
--- /dev/null
+++ b/test/UtilsTests.cpp
@@ -0,0 +1,261 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// See LICENSE file in the project root for full license information.
+//
+
+#define LOG_TAG "ArmnnDriverUtilsTests"
+//#define BOOST_TEST_MODULE armnn_driver_utils_tests
+#include <boost/test/unit_test.hpp>
+#include <log/log.h>
+
+#include "../ArmnnDriver.hpp"
+#include "../Utils.hpp"
+
+#include <fstream>
+#include <iomanip>
+#include <boost/format.hpp>
+#include <armnn/INetwork.hpp>
+
+BOOST_AUTO_TEST_SUITE(UtilsTests)
+
+using namespace armnn_driver;
+using namespace android::nn;
+using namespace android;
+
+// The following are helpers for writing unit tests for the driver.
+namespace
+{
+
+struct ExportNetworkGraphFixture
+{
+public:
+ // Setup: set the output dump directory and an empty dummy model (as only its memory address is used).
+ // Defaulting the output dump directory to "/sdcard" because it should exist and be writable in all deployments.
+ ExportNetworkGraphFixture()
+ : ExportNetworkGraphFixture("/sdcard")
+ {}
+ ExportNetworkGraphFixture(const std::string& requestInputsAndOutputsDumpDir)
+ : m_RequestInputsAndOutputsDumpDir(requestInputsAndOutputsDumpDir)
+ , m_Model({})
+ , m_FileName()
+ , m_FileStream()
+ {
+ // Get the memory address of the model and convert it to a hex string (of at least a '0' character).
+ size_t modelAddress = uintptr_t(&m_Model);
+ std::stringstream ss;
+ ss << std::uppercase << std::hex << std::setfill('0') << std::setw(1) << modelAddress;
+ std::string modelAddressHexString = ss.str();
+
+ // Set the name of the output .dot file.
+ m_FileName = boost::str(boost::format("%1%/networkgraph_%2%.dot")
+ % m_RequestInputsAndOutputsDumpDir
+ % modelAddressHexString);
+ }
+
+ // Teardown: delete the dump file regardless of the outcome of the tests.
+ ~ExportNetworkGraphFixture()
+ {
+ // Close the file stream.
+ m_FileStream.close();
+
+ // Ignore any error (such as file not found).
+ remove(m_FileName.c_str());
+ }
+
+ bool FileExists()
+ {
+ // Close any file opened in a previous session.
+ if (m_FileStream.is_open())
+ {
+ m_FileStream.close();
+ }
+
+ // Open the file.
+ m_FileStream.open(m_FileName, std::ifstream::in);
+
+ // Check that the file is open.
+ if (!m_FileStream.is_open())
+ {
+ return false;
+ }
+
+ // Check that the stream is readable.
+ return m_FileStream.good();
+ }
+
+ std::string GetFileContent()
+ {
+ // Check that the stream is readable.
+ if (!m_FileStream.good())
+ {
+ return "";
+ }
+
+ // Get all the contents of the file.
+ return std::string((std::istreambuf_iterator<char>(m_FileStream)),
+ (std::istreambuf_iterator<char>()));
+ }
+
+ std::string m_RequestInputsAndOutputsDumpDir;
+ Model m_Model;
+
+private:
+ std::string m_FileName;
+ std::ifstream m_FileStream;
+};
+
+class MockOptimizedNetwork final : public armnn::IOptimizedNetwork
+{
+public:
+ MockOptimizedNetwork(const std::string& mockSerializedContent)
+ : m_MockSerializedContent(mockSerializedContent)
+ {}
+ ~MockOptimizedNetwork() {}
+
+ armnn::Status PrintGraph() override { return armnn::Status::Failure; }
+ armnn::Status SerializeToDot(std::ostream& stream) const override
+ {
+ stream << m_MockSerializedContent;
+
+ return stream.good() ? armnn::Status::Success : armnn::Status::Failure;
+ }
+
+ void UpdateMockSerializedContent(const std::string& mockSerializedContent)
+ {
+ this->m_MockSerializedContent = mockSerializedContent;
+ }
+
+private:
+ std::string m_MockSerializedContent;
+};
+
+} // namespace
+
+BOOST_AUTO_TEST_CASE(ExportToEmptyDirectory)
+{
+ // Set the fixture for this test.
+ ExportNetworkGraphFixture fixture("");
+
+ // Set a mock content for the optimized network.
+ std::string mockSerializedContent = "This is a mock serialized content.";
+
+ // Set a mock optimized network.
+ MockOptimizedNetwork mockOptimizedNetwork(mockSerializedContent);
+
+ // Export the mock optimized network.
+ armnn_driver::ExportNetworkGraphToDotFile(mockOptimizedNetwork,
+ fixture.m_RequestInputsAndOutputsDumpDir,
+ fixture.m_Model);
+
+ // Check that the output file does not exist.
+ BOOST_TEST(!fixture.FileExists());
+}
+
+BOOST_AUTO_TEST_CASE(ExportNetwork)
+{
+ // Set the fixture for this test.
+ ExportNetworkGraphFixture fixture;
+
+ // Set a mock content for the optimized network.
+ std::string mockSerializedContent = "This is a mock serialized content.";
+
+ // Set a mock optimized network.
+ MockOptimizedNetwork mockOptimizedNetwork(mockSerializedContent);
+
+ // Export the mock optimized network.
+ armnn_driver::ExportNetworkGraphToDotFile(mockOptimizedNetwork,
+ fixture.m_RequestInputsAndOutputsDumpDir,
+ fixture.m_Model);
+
+ // Check that the output file exists and that it has the correct name.
+ BOOST_TEST(fixture.FileExists());
+
+ // Check that the content of the output file matches the mock content.
+ BOOST_TEST(fixture.GetFileContent() == mockSerializedContent);
+}
+
+BOOST_AUTO_TEST_CASE(ExportNetworkOverwriteFile)
+{
+ // Set the fixture for this test.
+ ExportNetworkGraphFixture fixture;
+
+ // Set a mock content for the optimized network.
+ std::string mockSerializedContent = "This is a mock serialized content.";
+
+ // Set a mock optimized network.
+ MockOptimizedNetwork mockOptimizedNetwork(mockSerializedContent);
+
+ // Export the mock optimized network.
+ armnn_driver::ExportNetworkGraphToDotFile(mockOptimizedNetwork,
+ fixture.m_RequestInputsAndOutputsDumpDir,
+ fixture.m_Model);
+
+ // Check that the output file exists and that it has the correct name.
+ BOOST_TEST(fixture.FileExists());
+
+ // Check that the content of the output file matches the mock content.
+ BOOST_TEST(fixture.GetFileContent() == mockSerializedContent);
+
+ // Update the mock serialized content of the network.
+ mockSerializedContent = "This is ANOTHER mock serialized content!";
+ mockOptimizedNetwork.UpdateMockSerializedContent(mockSerializedContent);
+
+ // Export the mock optimized network.
+ armnn_driver::ExportNetworkGraphToDotFile(mockOptimizedNetwork,
+ fixture.m_RequestInputsAndOutputsDumpDir,
+ fixture.m_Model);
+
+ // Check that the output file still exists and that it has the correct name.
+ BOOST_TEST(fixture.FileExists());
+
+ // Check that the content of the output file matches the mock content.
+ BOOST_TEST(fixture.GetFileContent() == mockSerializedContent);
+}
+
+BOOST_AUTO_TEST_CASE(ExportMultipleNetworks)
+{
+ // Set the fixtures for this test.
+ ExportNetworkGraphFixture fixture1;
+ ExportNetworkGraphFixture fixture2;
+ ExportNetworkGraphFixture fixture3;
+
+ // Set a mock content for the optimized network.
+ std::string mockSerializedContent = "This is a mock serialized content.";
+
+ // Set a mock optimized network.
+ MockOptimizedNetwork mockOptimizedNetwork(mockSerializedContent);
+
+ // Export the mock optimized network.
+ armnn_driver::ExportNetworkGraphToDotFile(mockOptimizedNetwork,
+ fixture1.m_RequestInputsAndOutputsDumpDir,
+ fixture1.m_Model);
+
+ // Check that the output file exists and that it has the correct name.
+ BOOST_TEST(fixture1.FileExists());
+
+ // Check that the content of the output file matches the mock content.
+ BOOST_TEST(fixture1.GetFileContent() == mockSerializedContent);
+
+ // Export the mock optimized network.
+ armnn_driver::ExportNetworkGraphToDotFile(mockOptimizedNetwork,
+ fixture2.m_RequestInputsAndOutputsDumpDir,
+ fixture2.m_Model);
+
+ // Check that the output file exists and that it has the correct name.
+ BOOST_TEST(fixture2.FileExists());
+
+ // Check that the content of the output file matches the mock content.
+ BOOST_TEST(fixture2.GetFileContent() == mockSerializedContent);
+
+ // Export the mock optimized network.
+ armnn_driver::ExportNetworkGraphToDotFile(mockOptimizedNetwork,
+ fixture3.m_RequestInputsAndOutputsDumpDir,
+ fixture3.m_Model);
+ // Check that the output file exists and that it has the correct name.
+ BOOST_TEST(fixture3.FileExists());
+
+ // Check that the content of the output file matches the mock content.
+ BOOST_TEST(fixture3.GetFileContent() == mockSerializedContent);
+}
+
+BOOST_AUTO_TEST_SUITE_END()