onnxruntime
107 строк · 3.5 Кб
1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT License.
3
4#include "testPch.h"
5#include "RawApiTests.h"
6#include "RawApiHelpers.h"
7
8#include <fstream>
9
10#include <roapi.h>
11
12namespace ml = Microsoft::AI::MachineLearning;
13
14auto CreateModelAsBuffer(const wchar_t* model_path) {
15std::ifstream input_stream(model_path, std::ios::binary | std::ios::ate);
16std::streamsize size = input_stream.tellg();
17input_stream.seekg(0, std::ios::beg);
18
19std::vector<char> buffer(static_cast<std::vector<char>::size_type>(size));
20input_stream.read(buffer.data(), size);
21
22return std::make_pair(buffer, size);
23}
24
25static void RawApiTestsApiTestsClassSetup() {
26WINML_EXPECT_HRESULT_SUCCEEDED(RoInitialize(RO_INIT_TYPE::RO_INIT_MULTITHREADED));
27}
28
29static void CreateModelFromFilePath() {
30std::wstring model_path = L"model.onnx";
31std::unique_ptr<ml::learning_model> model = nullptr;
32WINML_EXPECT_NO_THROW(model = std::make_unique<ml::learning_model>(model_path.c_str(), model_path.size()));
33WINML_EXPECT_NO_THROW(model.reset());
34}
35
36static void CreateCpuDevice() {
37std::unique_ptr<ml::learning_model_device> device = nullptr;
38WINML_EXPECT_NO_THROW(device = std::make_unique<ml::learning_model_device>());
39}
40
41static void Evaluate() {
42std::wstring model_path = L"model.onnx";
43std::unique_ptr<ml::learning_model> model = nullptr;
44WINML_EXPECT_NO_THROW(model = std::make_unique<ml::learning_model>(model_path.c_str(), model_path.size()));
45
46std::unique_ptr<ml::learning_model_device> device = nullptr;
47WINML_EXPECT_NO_THROW(device = std::make_unique<ml::learning_model_device>());
48
49RunOnDevice(*model.get(), *device.get(), InputStrategy::CopyInputs);
50
51WINML_EXPECT_NO_THROW(model.reset());
52}
53
54static void EvaluateNoInputCopy() {
55std::wstring model_path = L"model.onnx";
56std::unique_ptr<ml::learning_model> model = nullptr;
57WINML_EXPECT_NO_THROW(model = std::make_unique<ml::learning_model>(model_path.c_str(), model_path.size()));
58
59std::unique_ptr<ml::learning_model_device> device = nullptr;
60WINML_EXPECT_NO_THROW(device = std::make_unique<ml::learning_model_device>());
61
62RunOnDevice(*model.get(), *device.get(), InputStrategy::BindAsReference);
63
64WINML_EXPECT_NO_THROW(model.reset());
65}
66
67static void EvaluateManyBuffers() {
68std::wstring model_path = L"model.onnx";
69std::unique_ptr<ml::learning_model> model = nullptr;
70WINML_EXPECT_NO_THROW(model = std::make_unique<ml::learning_model>(model_path.c_str(), model_path.size()));
71
72std::unique_ptr<ml::learning_model_device> device = nullptr;
73WINML_EXPECT_NO_THROW(device = std::make_unique<ml::learning_model_device>());
74
75RunOnDevice(*model.get(), *device.get(), InputStrategy::BindWithMultipleReferences);
76
77WINML_EXPECT_NO_THROW(model.reset());
78}
79
80static void EvaluateFromModelFromBuffer() {
81std::wstring model_path = L"model.onnx";
82
83auto [buffer, size] = CreateModelAsBuffer(model_path.c_str());
84
85std::unique_ptr<ml::learning_model> model = nullptr;
86WINML_EXPECT_NO_THROW(model = std::make_unique<ml::learning_model>(buffer.data(), static_cast<size_t>(size)));
87
88std::unique_ptr<ml::learning_model_device> device = nullptr;
89WINML_EXPECT_NO_THROW(device = std::make_unique<ml::learning_model_device>());
90
91RunOnDevice(*model.get(), *device.get(), InputStrategy::CopyInputs);
92
93WINML_EXPECT_NO_THROW(model.reset());
94}
95
96const RawApiTestsApi& getapi() {
97static constexpr RawApiTestsApi api = {
98RawApiTestsApiTestsClassSetup,
99CreateModelFromFilePath,
100CreateCpuDevice,
101Evaluate,
102EvaluateNoInputCopy,
103EvaluateManyBuffers,
104EvaluateFromModelFromBuffer,
105};
106return api;
107}
108