• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "iamf/common/utils/validation_utils.h"
2 
3 /*
4  * Copyright (c) 2023, Alliance for Open Media. All rights reserved
5  *
6  * This source code is subject to the terms of the BSD 3-Clause Clear License
7  * and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear
8  * License was not distributed with this source code in the LICENSE file, you
9  * can obtain it at www.aomedia.org/license/software-license/bsd-3-c-c. If the
10  * Alliance for Open Media Patent License 1.0 was not distributed with this
11  * source code in the PATENTS file, you can obtain it at
12  * www.aomedia.org/license/patent.
13  */
14 #include <array>
15 #include <cstdint>
16 #include <functional>
17 #include <optional>
18 #include <vector>
19 
20 #include "absl/status/status_matchers.h"
21 #include "absl/strings/string_view.h"
22 #include "gmock/gmock.h"
23 #include "gtest/gtest.h"
24 
25 namespace iamf_tools {
26 namespace {
27 
28 using ::absl_testing::IsOk;
29 using ::testing::HasSubstr;
30 using ::testing::Not;
31 
32 constexpr absl::string_view kOmitContext = "";
33 constexpr absl::string_view kCustomUserContext = "Custom User Context";
34 constexpr std::array<int, 4> kFourTestValues = {1, 2, 3, 4};
35 
TEST(ValidateContainerSizeEqual,OkIfArgsAreEqual)36 TEST(ValidateContainerSizeEqual, OkIfArgsAreEqual) {
37   constexpr uint8_t kReportedSizeFour = 4;
38 
39   EXPECT_THAT(ValidateContainerSizeEqual(kOmitContext, kFourTestValues,
40                                          kReportedSizeFour),
41               IsOk());
42 }
43 
TEST(ValidateContainerSizeEqual,NotOkIfArgsAreNotEquals)44 TEST(ValidateContainerSizeEqual, NotOkIfArgsAreNotEquals) {
45   constexpr uint8_t kInaccurateSizeFive = 5;
46 
47   EXPECT_FALSE(ValidateContainerSizeEqual(kOmitContext, kFourTestValues,
48                                           kInaccurateSizeFive)
49                    .ok());
50 }
51 
TEST(ValidateContainerSizeEqual,MessageContainsContextOnError)52 TEST(ValidateContainerSizeEqual, MessageContainsContextOnError) {
53   constexpr uint8_t kInaccurateSizeFive = 5;
54 
55   EXPECT_THAT(ValidateContainerSizeEqual(kCustomUserContext, kFourTestValues,
56                                          kInaccurateSizeFive)
57                   .message(),
58               HasSubstr(kCustomUserContext));
59 }
60 
TEST(ValidateEqual,OkIfArgsAreEqual)61 TEST(ValidateEqual, OkIfArgsAreEqual) {
62   const auto kLeftArg = 123;
63   const auto kRightArg = 123;
64   EXPECT_THAT(ValidateEqual(kLeftArg, kRightArg, kOmitContext), IsOk());
65 }
66 
TEST(ValidateEqual,NotOkIfArgsAreNotEqual)67 TEST(ValidateEqual, NotOkIfArgsAreNotEqual) {
68   const auto kLeftArg = 123;
69   const auto kUnequalRightArg = 223;
70   EXPECT_FALSE(ValidateEqual(kLeftArg, kUnequalRightArg, kOmitContext).ok());
71 }
72 
TEST(ValidateNotEqual,OkIfArgsAreNotEqual)73 TEST(ValidateNotEqual, OkIfArgsAreNotEqual) {
74   const auto kLeftArg = 123;
75   const auto kRightArg = 124;
76   EXPECT_THAT(ValidateNotEqual(kLeftArg, kRightArg, kOmitContext), IsOk());
77 }
78 
TEST(ValidateNotEqual,NotOkIfArgsAreEqual)79 TEST(ValidateNotEqual, NotOkIfArgsAreEqual) {
80   const auto kLeftArg = 123;
81   const auto kEqualRightArg = 123;
82   EXPECT_FALSE(ValidateNotEqual(kLeftArg, kEqualRightArg, kOmitContext).ok());
83 }
84 
TEST(ValidateHasValue,OkIfArgHasValue)85 TEST(ValidateHasValue, OkIfArgHasValue) {
86   constexpr std::optional<int> kArg = 123;
87   EXPECT_THAT(ValidateHasValue(kArg, kOmitContext), IsOk());
88 }
89 
TEST(ValidateHasValue,NotOkIfArgDoesNotHaveValue)90 TEST(ValidateHasValue, NotOkIfArgDoesNotHaveValue) {
91   constexpr std::optional<int> kArg = std::nullopt;
92   EXPECT_FALSE(ValidateHasValue(kArg, kOmitContext).ok());
93 }
94 
TEST(ValidateUnique,OkIfArgsAreUnique)95 TEST(ValidateUnique, OkIfArgsAreUnique) {
96   const std::vector<int> kVectorWithUniqueValues = {1, 2, 3, 99};
97 
98   EXPECT_THAT(ValidateUnique(kVectorWithUniqueValues.begin(),
99                              kVectorWithUniqueValues.end(), kOmitContext),
100               IsOk());
101 }
102 
TEST(ValidateUnique,NotOkIfArgsAreNotUnique)103 TEST(ValidateUnique, NotOkIfArgsAreNotUnique) {
104   const std::vector<int> kVectorWithDuplicateValues = {1, 2, 3, 99, 1};
105 
106   EXPECT_FALSE(ValidateUnique(kVectorWithDuplicateValues.begin(),
107                               kVectorWithDuplicateValues.end(), kOmitContext)
108                    .ok());
109 }
110 
TEST(ValidateInRange,OkIfValueInRange)111 TEST(ValidateInRange, OkIfValueInRange) {
112   EXPECT_THAT(ValidateInRange(0, {-1, 1}, kOmitContext), IsOk());
113   EXPECT_THAT(ValidateInRange(-1, {-1, 1}, kOmitContext), IsOk());
114   EXPECT_THAT(ValidateInRange(1, {-1, 1}, kOmitContext), IsOk());
115   EXPECT_THAT(ValidateInRange(1.1f, {1.0f, 1.2f}, kOmitContext), IsOk());
116   EXPECT_THAT(
117       ValidateInRange(uint8_t{254}, {uint8_t{253}, uint8_t{255}}, kOmitContext),
118       IsOk());
119   EXPECT_THAT(
120       ValidateInRange(int64_t{-0xFFFFFE},
121                       {int64_t{-0xFFFFFF}, int64_t{-0xFFFF}}, kOmitContext),
122       IsOk());
123 }
124 
TEST(ValidateInRange,InvalidIfValueOutOfRange)125 TEST(ValidateInRange, InvalidIfValueOutOfRange) {
126   EXPECT_THAT(ValidateInRange(2, {0, 1}, kOmitContext), Not(IsOk()));
127   EXPECT_THAT(ValidateInRange(-1, {0, 1}, kOmitContext), Not(IsOk()));
128   EXPECT_THAT(ValidateInRange(1.11f, {1.0f, 1.1f}, kOmitContext), Not(IsOk()));
129   EXPECT_THAT(
130       ValidateInRange(uint8_t{255}, {uint8_t{253}, uint8_t{254}}, kOmitContext),
131       Not(IsOk()));
132   EXPECT_THAT(
133       ValidateInRange(int64_t{-0xFFFE}, {int64_t{-0xFFFFFF}, int64_t{-0xFFFF}},
134                       kOmitContext),
135       Not(IsOk()));
136 }
137 
TEST(ValidateComparison,OkIfValidComparison)138 TEST(ValidateComparison, OkIfValidComparison) {
139   EXPECT_THAT(Validate(1, std::less{}, 2, kOmitContext), IsOk());
140   EXPECT_THAT(Validate(2.0f, std::greater{}, 1.0f, kOmitContext), IsOk());
141   EXPECT_THAT(Validate(2, std::greater_equal{}, 2, kOmitContext), IsOk());
142   EXPECT_THAT(Validate(1, std::equal_to{}, 1, kOmitContext), IsOk());
143   EXPECT_THAT(Validate(2, std::not_equal_to{}, 1, kOmitContext), IsOk());
144 }
145 
TEST(ValidateComparison,InvalidIfInvalidComparison)146 TEST(ValidateComparison, InvalidIfInvalidComparison) {
147   EXPECT_THAT(Validate(2, std::less{}, 1, kOmitContext), Not(IsOk()));
148   EXPECT_THAT(Validate(1.0f, std::greater{}, 2.0f, kOmitContext), Not(IsOk()));
149   EXPECT_THAT(Validate(2, std::equal_to{}, 1, kOmitContext), Not(IsOk()));
150   EXPECT_THAT(Validate(1, std::not_equal_to{}, 1, kOmitContext), Not(IsOk()));
151 }
152 
153 }  // namespace
154 }  // namespace iamf_tools
155