mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-06-04 23:59:56 +00:00
Add Native C API test from NuGet (#481)
* Initial check-in of Native Capi tests * Minor update * Updated with OrtCreateCpuAllocatorInfo working after including cpu_provider_factory.h * Minor editw * Minor update
This commit is contained in:
parent
2a9a924c23
commit
1f1dcc352f
6 changed files with 270 additions and 5 deletions
|
|
@ -32,7 +32,13 @@
|
|||
<!--TODO: Find a way to bundle the native symbol files properly -->
|
||||
<ItemGroup>
|
||||
<None Include="$(OnnxRuntimeCsharpRoot)\..\include\onnxruntime\core\session\onnxruntime_c_api.h"
|
||||
PackagePath="\build\native\include\onnxruntime"
|
||||
PackagePath="\build\native\include\core\session"
|
||||
Pack="true"
|
||||
CopyToOutputDirectory="Never"
|
||||
Visible="false"
|
||||
/>
|
||||
<None Include="$(OnnxRuntimeCsharpRoot)\..\include\onnxruntime\core\providers\cpu\cpu_provider_factory.h"
|
||||
PackagePath="\build\native\include\core\providers\cpu"
|
||||
Pack="true"
|
||||
CopyToOutputDirectory="Never"
|
||||
Visible="false"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,83 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
//
|
||||
#include "CppUnitTest.h"
|
||||
#include <assert.h>
|
||||
#include <core/session/onnxruntime_c_api.h>
|
||||
#include <core/providers/cpu/cpu_provider_factory.h>
|
||||
|
||||
|
||||
#define ORT_ABORT_ON_ERROR(expr) \
|
||||
do { \
|
||||
OrtStatus* onnx_status = (expr); \
|
||||
if (onnx_status != NULL) { \
|
||||
const char* msg = OrtGetErrorMessage(onnx_status); \
|
||||
fprintf(stderr, "%s\n", msg); \
|
||||
OrtReleaseStatus(onnx_status); \
|
||||
abort(); \
|
||||
} \
|
||||
} while (0);
|
||||
|
||||
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
|
||||
|
||||
namespace UnitTest1
|
||||
{
|
||||
TEST_CLASS(UnitTest1)
|
||||
{
|
||||
public:
|
||||
|
||||
int run_inference(OrtSession* session) {
|
||||
size_t input_height = 224;
|
||||
size_t input_width = 224;
|
||||
float* model_input = (float *) malloc (sizeof (float) * 224 * 224 * 3);
|
||||
size_t model_input_ele_count = 224 * 224 * 3;
|
||||
|
||||
// initialize to values between 0.0 and 1.0
|
||||
for (unsigned int i = 0; i < model_input_ele_count; i++)
|
||||
model_input[i] = (float)i / (float)(model_input_ele_count + 1);
|
||||
|
||||
OrtAllocatorInfo* allocator_info;
|
||||
ORT_ABORT_ON_ERROR(OrtCreateCpuAllocatorInfo(OrtArenaAllocator, OrtMemTypeDefault, &allocator_info));
|
||||
const size_t input_shape[] = { 1, 3, 224, 224 };
|
||||
const size_t input_shape_len = sizeof(input_shape) / sizeof(input_shape[0]);
|
||||
const size_t model_input_len = model_input_ele_count * sizeof(float);
|
||||
|
||||
OrtValue* input_tensor = NULL;
|
||||
ORT_ABORT_ON_ERROR(OrtCreateTensorWithDataAsOrtValue(allocator_info, model_input, model_input_len, input_shape, input_shape_len, ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT, &input_tensor));
|
||||
assert(input_tensor != NULL);
|
||||
assert(OrtIsTensor(input_tensor));
|
||||
OrtReleaseAllocatorInfo(allocator_info);
|
||||
const char* input_names[] = { "data_0" };
|
||||
const char* output_names[] = { "softmaxout_1" };
|
||||
OrtValue* output_tensor = NULL;
|
||||
ORT_ABORT_ON_ERROR(OrtRun(session, NULL, input_names, (const OrtValue* const*)&input_tensor, 1, output_names, 1, &output_tensor));
|
||||
assert(output_tensor != NULL);
|
||||
assert(OrtIsTensor(output_tensor));
|
||||
|
||||
OrtReleaseValue(output_tensor);
|
||||
OrtReleaseValue(input_tensor);
|
||||
free(model_input);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int test()
|
||||
{
|
||||
const wchar_t * model_path = L"squeezenet.onnx";
|
||||
OrtEnv* env;
|
||||
ORT_ABORT_ON_ERROR(OrtCreateEnv(ORT_LOGGING_LEVEL_WARNING, "test", &env));
|
||||
OrtSessionOptions* session_option = OrtCreateSessionOptions();
|
||||
OrtSession* session;
|
||||
ORT_ABORT_ON_ERROR(OrtCreateSession(env, model_path, session_option, &session));
|
||||
|
||||
OrtSetSessionThreadPoolSize(session_option, 1);
|
||||
//return run_inference(session);
|
||||
return 0;
|
||||
}
|
||||
|
||||
TEST_METHOD(TestMethod1)
|
||||
{
|
||||
int res = test();
|
||||
Assert::AreEqual(res, 0);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<OnnxRuntimeCsharpRoot>$(MSBuildThisFileDirectory)..\..</OnnxRuntimeCsharpRoot>
|
||||
<OnnxRuntimeCsharpRoot>D:\onnxruntime\csharp</OnnxRuntimeCsharpRoot>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\packages\Microsoft.ML.OnnxRuntime.$(CurrentOnnxRuntimeVersion)\build\native\Microsoft.ML.OnnxRuntime.props" Condition="Exists('..\packages\Microsoft.ML.OnnxRuntime.$(CurrentOnnxRuntimeVersion)\build\native\Microsoft.ML.OnnxRuntime.props')" />
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>15.0</VCProjectVersion>
|
||||
<ProjectGuid>{2FF16D63-26BD-429A-9B94-862418408E27}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>Microsoft.ML.OnnxRuntime.EndToEndTests.Capi</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
|
||||
<ProjectSubType>NativeUnitTestProject</ProjectSubType>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<UseFullPaths>true</UseFullPaths>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<UseFullPaths>true</UseFullPaths>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="InferenceTestCapi.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="$(OnnxRuntimeCSharpRoot)\testdata\*">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
<Visible>false</Visible>
|
||||
</None>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
<Import Project="..\packages\Microsoft.ML.OnnxRuntime.$(CurrentOnnxRuntimeVersion)\build\native\Microsoft.ML.OnnxRuntime.targets" Condition="Exists('..\packages\Microsoft.ML.OnnxRuntime.$(CurrentOnnxRuntimeVersion)\build\native\Microsoft.ML.OnnxRuntime.targets')" />
|
||||
</ImportGroup>
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\Microsoft.ML.OnnxRuntime.$(CurrentOnnxRuntimeVersion)\build\native\Microsoft.ML.OnnxRuntime.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.ML.OnnxRuntime.$(CurrentOnnxRuntimeVersion)\build\native\Microsoft.ML.OnnxRuntime.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Microsoft.ML.OnnxRuntime.$(CurrentOnnxRuntimeVersion)\build\native\Microsoft.ML.OnnxRuntime.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.ML.OnnxRuntime.$(CurrentOnnxRuntimeVersion)\build\native\Microsoft.ML.OnnxRuntime.targets'))" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.ML.OnnxRuntime" version="CurrentOnnxRuntimeVersion" targetFramework="native" />
|
||||
</packages>
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
REM Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
REM Licensed under the MIT License.
|
||||
echo on
|
||||
|
||||
set LocalNuGetRepo=%1
|
||||
setlocal enableextensions disabledelayedexpansion
|
||||
|
||||
REM WorkingDirectory is Build.SourcesDirectory\csharp
|
||||
set /p MajorVersionNumber=<..\VERSION_NUMBER
|
||||
set VersionSuffix=
|
||||
IF NOT DEFINED IsReleaseBuild (
|
||||
FOR /F "tokens=* USEBACKQ" %%F IN (`git rev-parse --short HEAD`) DO (
|
||||
set VersionSuffix=-dev-%%F
|
||||
)
|
||||
)
|
||||
|
||||
set CurrentOnnxRuntimeVersion=%MajorVersionNumber%%VersionSuffix%
|
||||
@echo %CurrentOnnxRuntimeVersion%
|
||||
|
||||
pushd test\Microsoft.ML.OnnxRuntime.EndToEndTests.Capi
|
||||
|
||||
REM Set up VS envvars
|
||||
REM call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
|
||||
|
||||
REM Generate packages.config with version
|
||||
echo off
|
||||
set "token=CurrentOnnxRuntimeVersion"
|
||||
set "replace=%CurrentOnnxRuntimeVersion%"
|
||||
set "templateFile=packages.conf"
|
||||
for /f "delims=" %%i in ('type "%templateFile%" ^& break ^> "packages.config" ') do (
|
||||
set "line=%%i"
|
||||
setlocal enabledelayedexpansion
|
||||
>>"packages.config" echo(!line:%token%=%replace%!
|
||||
endlocal
|
||||
)
|
||||
echo on
|
||||
|
||||
REM Restore NuGet Packages
|
||||
nuget restore -PackagesDirectory ..\packages -Source %LocalNuGetRepo% Microsoft.ML.OnnxRuntime.EndToEndTests.Capi.vcxproj
|
||||
if NOT %ERRORLEVEL% EQU 0 (
|
||||
echo "Error:Nuget restore failed"
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
REM Build Native project
|
||||
msbuild Microsoft.ML.OnnxRuntime.EndToEndTests.Capi.vcxproj
|
||||
if NOT %ERRORLEVEL% EQU 0 (
|
||||
echo "Error:MSBuild failed to compile project"
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
|
||||
REM Run Unit Tests
|
||||
vstest.console.exe /platform:x64 x64\debug\Microsoft.ML.OnnxRuntime.EndToEndTests.Capi.dll
|
||||
if NOT %ERRORLEVEL% EQU 0 (
|
||||
echo "Unit test failure: %ERRORLEVEL%"
|
||||
)
|
||||
|
||||
popd
|
||||
EXIT /B 0
|
||||
|
|
@ -30,12 +30,13 @@
|
|||
<Visible>false</Visible>
|
||||
</None>
|
||||
|
||||
<None Include="$(OnnxRuntimeBuildDirectory)\models\**\*">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
<Visible>false</Visible>
|
||||
</None>
|
||||
<BuildEnvVars Include="OnnxRuntimeBuildDirectory=$(OnnxRuntimeBuildDirectory)" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="DefineBuildEnvironmentVariables" BeforeTargets="Build">
|
||||
<WriteLinesToFile File="$(OutputPath)\Properties.txt" Lines="@(BuildEnvVars)" Overwrite="true" />
|
||||
</Target>
|
||||
|
||||
<ItemGroup>
|
||||
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
Loading…
Reference in a new issue