|
1 | 1 | // Copyright (c) Microsoft Corporation. All rights reserved. |
2 | 2 | // Licensed under the MIT License. |
3 | 3 |
|
| 4 | +#include "onnxruntime_config.h" |
4 | 5 | #include "core/session/onnxruntime_cxx_api.h" |
| 6 | +#include "core/session/ort_version_check.h" |
5 | 7 |
|
6 | | -#include <cstdint> |
7 | | -#include <charconv> |
8 | | -#include <optional> |
9 | | -#include <string> |
10 | | -#include <vector> |
11 | | - |
12 | | -#include "absl/strings/str_split.h" |
13 | 8 | #include "gtest/gtest.h" |
14 | 9 |
|
15 | | -TEST(CApiTest, VersionConsistencyWithApiVersion) { |
16 | | - const auto version_string = Ort::GetVersionString(); |
17 | | - const std::vector<std::string> version_string_components = absl::StrSplit(version_string, '.'); |
18 | | - ASSERT_EQ(version_string_components.size(), size_t{3}); |
19 | | - |
20 | | - auto to_uint32_t = [](const std::string& s) -> std::optional<uint32_t> { |
21 | | - uint32_t result{}; |
22 | | - if (std::from_chars(s.data(), s.data() + s.size(), result).ec == std::errc{}) { |
23 | | - return result; |
24 | | - } |
25 | | - return std::nullopt; |
26 | | - }; |
27 | | - |
28 | | - ASSERT_NE(to_uint32_t(version_string_components[0]), std::nullopt); |
29 | | - ASSERT_EQ(to_uint32_t(version_string_components[1]), uint32_t{ORT_API_VERSION}); |
30 | | - ASSERT_NE(to_uint32_t(version_string_components[2]), std::nullopt); |
| 10 | +using onnxruntime::version_check::IsOrtVersionValid; |
| 11 | +using onnxruntime::version_check::ParseUint; |
| 12 | + |
| 13 | +// Compile-time tests for ParseUint |
| 14 | +static_assert(ParseUint("0") == 0u); |
| 15 | +static_assert(ParseUint("1") == 1u); |
| 16 | +static_assert(ParseUint("25") == 25u); |
| 17 | +static_assert(ParseUint("123") == 123u); |
| 18 | +static_assert(ParseUint("4294967295") == 4294967295u); // UINT32_MAX |
| 19 | +static_assert(!(ParseUint("4294967296").has_value)); // UINT32_MAX + 1 overflows |
| 20 | +static_assert(!(ParseUint("").has_value)); // empty |
| 21 | +static_assert(!(ParseUint("01").has_value)); // leading zero |
| 22 | +static_assert(!(ParseUint("00").has_value)); // leading zero |
| 23 | +static_assert(!(ParseUint("abc").has_value)); // non-digit |
| 24 | +static_assert(!(ParseUint("1a").has_value)); // trailing non-digit |
| 25 | +static_assert(!(ParseUint("-1").has_value)); // negative sign |
| 26 | +static_assert(!(ParseUint("1.0").has_value)); // contains dot |
| 27 | +static_assert(ParseUint("0").has_value); |
| 28 | +static_assert(!ParseUint("").has_value); |
| 29 | + |
| 30 | +// Compile-time tests for IsOrtVersionValid (default expected_api_version = ORT_API_VERSION) |
| 31 | +static_assert(IsOrtVersionValid(ORT_VERSION)); // current version must be valid |
| 32 | + |
| 33 | +// Invalid formats |
| 34 | +static_assert(!IsOrtVersionValid("")); |
| 35 | +static_assert(!IsOrtVersionValid("1")); |
| 36 | +static_assert(!IsOrtVersionValid("1.0")); |
| 37 | +static_assert(!IsOrtVersionValid("1.0.0.0")); // too many dots |
| 38 | +static_assert(!IsOrtVersionValid("2.0.0")); // major != 1 |
| 39 | +static_assert(!IsOrtVersionValid("1.02.0")); // leading zero in minor |
| 40 | +static_assert(!IsOrtVersionValid("1.0.01")); // leading zero in patch |
| 41 | +static_assert(!IsOrtVersionValid("1..0")); // empty minor |
| 42 | +static_assert(!IsOrtVersionValid("1.0.")); // empty patch |
| 43 | +static_assert(!IsOrtVersionValid(".1.0")); // empty major |
| 44 | +static_assert(!IsOrtVersionValid("abc")); // non-numeric |
| 45 | +static_assert(!IsOrtVersionValid("1.abc.0")); // non-numeric minor |
| 46 | +static_assert(!IsOrtVersionValid("1.0.abc")); // non-numeric patch |
| 47 | + |
| 48 | +// Compile-time tests for IsOrtVersionValid with explicit expected_api_version |
| 49 | +static_assert(IsOrtVersionValid("1.0.0", 0)); |
| 50 | +static_assert(IsOrtVersionValid("1.1.0", 1)); |
| 51 | +static_assert(IsOrtVersionValid("1.25.0", 25)); |
| 52 | +static_assert(IsOrtVersionValid("1.25.3", 25)); |
| 53 | +static_assert(IsOrtVersionValid("1.100.0", 100)); |
| 54 | +static_assert(!IsOrtVersionValid("1.25.0", 24)); // minor doesn't match expected |
| 55 | +static_assert(!IsOrtVersionValid("1.25.0", 26)); // minor doesn't match expected |
| 56 | +static_assert(!IsOrtVersionValid("1.0.0", 1)); // minor 0 != expected 1 |
| 57 | +static_assert(!IsOrtVersionValid("2.0.0", 0)); // major != 1 |
| 58 | +static_assert(!IsOrtVersionValid("1.02.0", 2)); // leading zero in minor |
| 59 | +static_assert(!IsOrtVersionValid("1.0.01", 0)); // leading zero in patch |
| 60 | + |
| 61 | +TEST(CApiTest, VersionIsValid) { |
| 62 | + // Runtime sanity check — the version string returned by the API is the expected one. |
| 63 | + EXPECT_STREQ(Ort::GetVersionString().c_str(), ORT_VERSION); |
31 | 64 | } |
0 commit comments