xref: /aosp_15_r20/external/libgav1/examples/file_reader_test_common.h (revision 095378508e87ed692bf8dfeb34008b65b3735891)
1*09537850SAkhilesh Sanikop /*
2*09537850SAkhilesh Sanikop  * Copyright 2021 The libgav1 Authors
3*09537850SAkhilesh Sanikop  *
4*09537850SAkhilesh Sanikop  * Licensed under the Apache License, Version 2.0 (the "License");
5*09537850SAkhilesh Sanikop  * you may not use this file except in compliance with the License.
6*09537850SAkhilesh Sanikop  * You may obtain a copy of the License at
7*09537850SAkhilesh Sanikop  *
8*09537850SAkhilesh Sanikop  *      http://www.apache.org/licenses/LICENSE-2.0
9*09537850SAkhilesh Sanikop  *
10*09537850SAkhilesh Sanikop  * Unless required by applicable law or agreed to in writing, software
11*09537850SAkhilesh Sanikop  * distributed under the License is distributed on an "AS IS" BASIS,
12*09537850SAkhilesh Sanikop  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*09537850SAkhilesh Sanikop  * See the License for the specific language governing permissions and
14*09537850SAkhilesh Sanikop  * limitations under the License.
15*09537850SAkhilesh Sanikop  */
16*09537850SAkhilesh Sanikop 
17*09537850SAkhilesh Sanikop #ifndef LIBGAV1_EXAMPLES_FILE_READER_TEST_COMMON_H_
18*09537850SAkhilesh Sanikop #define LIBGAV1_EXAMPLES_FILE_READER_TEST_COMMON_H_
19*09537850SAkhilesh Sanikop 
20*09537850SAkhilesh Sanikop #include <cstdint>
21*09537850SAkhilesh Sanikop #include <memory>
22*09537850SAkhilesh Sanikop #include <ostream>
23*09537850SAkhilesh Sanikop #include <string>
24*09537850SAkhilesh Sanikop #include <vector>
25*09537850SAkhilesh Sanikop 
26*09537850SAkhilesh Sanikop #include "examples/file_reader.h"
27*09537850SAkhilesh Sanikop #include "examples/file_reader_factory.h"
28*09537850SAkhilesh Sanikop #include "examples/file_reader_interface.h"
29*09537850SAkhilesh Sanikop #include "gtest/gtest.h"
30*09537850SAkhilesh Sanikop #include "tests/utils.h"
31*09537850SAkhilesh Sanikop 
32*09537850SAkhilesh Sanikop namespace libgav1 {
33*09537850SAkhilesh Sanikop 
34*09537850SAkhilesh Sanikop struct FileReaderTestParameters {
35*09537850SAkhilesh Sanikop   FileReaderTestParameters() = default;
FileReaderTestParametersFileReaderTestParameters36*09537850SAkhilesh Sanikop   FileReaderTestParameters(FileReaderFactory::OpenFunction open_function,
37*09537850SAkhilesh Sanikop                            const char* file_name)
38*09537850SAkhilesh Sanikop       : open_function(open_function), file_name(file_name) {}
39*09537850SAkhilesh Sanikop   FileReaderTestParameters(const FileReaderTestParameters&) = default;
40*09537850SAkhilesh Sanikop   FileReaderTestParameters& operator=(const FileReaderTestParameters&) = delete;
41*09537850SAkhilesh Sanikop   FileReaderTestParameters(FileReaderTestParameters&&) = default;
42*09537850SAkhilesh Sanikop   FileReaderTestParameters& operator=(FileReaderTestParameters&&) = default;
43*09537850SAkhilesh Sanikop   ~FileReaderTestParameters() = default;
44*09537850SAkhilesh Sanikop 
45*09537850SAkhilesh Sanikop   FileReaderFactory::OpenFunction open_function = nullptr;
46*09537850SAkhilesh Sanikop   const char* file_name = nullptr;
47*09537850SAkhilesh Sanikop };
48*09537850SAkhilesh Sanikop 
49*09537850SAkhilesh Sanikop class FileReaderTestBase {
50*09537850SAkhilesh Sanikop  public:
51*09537850SAkhilesh Sanikop   FileReaderTestBase() = default;
52*09537850SAkhilesh Sanikop   FileReaderTestBase(const FileReaderTestBase&) = delete;
53*09537850SAkhilesh Sanikop   FileReaderTestBase& operator=(const FileReaderTestBase&) = delete;
54*09537850SAkhilesh Sanikop   FileReaderTestBase(FileReaderTestBase&&) = default;
55*09537850SAkhilesh Sanikop   FileReaderTestBase& operator=(FileReaderTestBase&&) = default;
56*09537850SAkhilesh Sanikop   ~FileReaderTestBase() = default;
57*09537850SAkhilesh Sanikop 
58*09537850SAkhilesh Sanikop  protected:
OpenReader(const char * file_name,FileReaderFactory::OpenFunction open_function)59*09537850SAkhilesh Sanikop   void OpenReader(const char* file_name,
60*09537850SAkhilesh Sanikop                   FileReaderFactory::OpenFunction open_function) {
61*09537850SAkhilesh Sanikop     file_name_ = test_utils::GetTestInputFilePath(file_name);
62*09537850SAkhilesh Sanikop     reader_ = open_function(file_name_, /*error_tolerant=*/false);
63*09537850SAkhilesh Sanikop     ASSERT_NE(reader_, nullptr);
64*09537850SAkhilesh Sanikop   }
65*09537850SAkhilesh Sanikop 
66*09537850SAkhilesh Sanikop   std::string file_name_;
67*09537850SAkhilesh Sanikop   std::unique_ptr<FileReaderInterface> reader_;
68*09537850SAkhilesh Sanikop   std::vector<uint8_t> tu_data_;
69*09537850SAkhilesh Sanikop };
70*09537850SAkhilesh Sanikop 
71*09537850SAkhilesh Sanikop class FileReaderFailTest
72*09537850SAkhilesh Sanikop     : public FileReaderTestBase,
73*09537850SAkhilesh Sanikop       public testing::TestWithParam<FileReaderTestParameters> {
74*09537850SAkhilesh Sanikop  public:
75*09537850SAkhilesh Sanikop   FileReaderFailTest() = default;
76*09537850SAkhilesh Sanikop   FileReaderFailTest(const FileReaderTestBase&) = delete;
77*09537850SAkhilesh Sanikop   FileReaderFailTest& operator=(const FileReaderTestBase&) = delete;
78*09537850SAkhilesh Sanikop   ~FileReaderFailTest() override = default;
79*09537850SAkhilesh Sanikop 
80*09537850SAkhilesh Sanikop  protected:
SetUp()81*09537850SAkhilesh Sanikop   void SetUp() override {
82*09537850SAkhilesh Sanikop     OpenReader(GetParam().file_name, GetParam().open_function);
83*09537850SAkhilesh Sanikop   }
84*09537850SAkhilesh Sanikop };
85*09537850SAkhilesh Sanikop 
86*09537850SAkhilesh Sanikop class FileReaderTestNoTimeStamps
87*09537850SAkhilesh Sanikop     : public FileReaderTestBase,
88*09537850SAkhilesh Sanikop       public testing::TestWithParam<FileReaderTestParameters> {
89*09537850SAkhilesh Sanikop  public:
90*09537850SAkhilesh Sanikop   FileReaderTestNoTimeStamps() = default;
91*09537850SAkhilesh Sanikop   FileReaderTestNoTimeStamps(const FileReaderTestNoTimeStamps&) = delete;
92*09537850SAkhilesh Sanikop   FileReaderTestNoTimeStamps& operator=(const FileReaderTestNoTimeStamps&) =
93*09537850SAkhilesh Sanikop       delete;
94*09537850SAkhilesh Sanikop   ~FileReaderTestNoTimeStamps() override = default;
95*09537850SAkhilesh Sanikop 
96*09537850SAkhilesh Sanikop  protected:
SetUp()97*09537850SAkhilesh Sanikop   void SetUp() override {
98*09537850SAkhilesh Sanikop     OpenReader(GetParam().file_name, GetParam().open_function);
99*09537850SAkhilesh Sanikop   }
100*09537850SAkhilesh Sanikop };
101*09537850SAkhilesh Sanikop 
102*09537850SAkhilesh Sanikop class FileReaderErrorTolerant
103*09537850SAkhilesh Sanikop     : public FileReaderTestBase,
104*09537850SAkhilesh Sanikop       public testing::TestWithParam<FileReaderTestParameters> {
105*09537850SAkhilesh Sanikop  public:
106*09537850SAkhilesh Sanikop   FileReaderErrorTolerant() = default;
107*09537850SAkhilesh Sanikop   FileReaderErrorTolerant(const FileReaderErrorTolerant&) = delete;
108*09537850SAkhilesh Sanikop   FileReaderErrorTolerant& operator=(const FileReaderErrorTolerant&) = delete;
109*09537850SAkhilesh Sanikop   ~FileReaderErrorTolerant() override = default;
110*09537850SAkhilesh Sanikop 
111*09537850SAkhilesh Sanikop  protected:
SetUp()112*09537850SAkhilesh Sanikop   void SetUp() override {
113*09537850SAkhilesh Sanikop     file_name_ = test_utils::GetTestInputFilePath(GetParam().file_name);
114*09537850SAkhilesh Sanikop     reader_ = GetParam().open_function(file_name_, /*error_tolerant=*/true);
115*09537850SAkhilesh Sanikop     ASSERT_NE(reader_, nullptr);
116*09537850SAkhilesh Sanikop   }
117*09537850SAkhilesh Sanikop };
118*09537850SAkhilesh Sanikop 
119*09537850SAkhilesh Sanikop struct FileReaderTestWithTimeStampsParameters {
120*09537850SAkhilesh Sanikop   FileReaderTestWithTimeStampsParameters() = default;
FileReaderTestWithTimeStampsParametersFileReaderTestWithTimeStampsParameters121*09537850SAkhilesh Sanikop   FileReaderTestWithTimeStampsParameters(
122*09537850SAkhilesh Sanikop       FileReaderFactory::OpenFunction open_function, const char* file_name,
123*09537850SAkhilesh Sanikop       int64_t expected_last_timestamp)
124*09537850SAkhilesh Sanikop       : open_function(open_function),
125*09537850SAkhilesh Sanikop         file_name(file_name),
126*09537850SAkhilesh Sanikop         expected_last_timestamp(expected_last_timestamp) {}
127*09537850SAkhilesh Sanikop   FileReaderTestWithTimeStampsParameters(
128*09537850SAkhilesh Sanikop       const FileReaderTestWithTimeStampsParameters&) = default;
129*09537850SAkhilesh Sanikop   FileReaderTestWithTimeStampsParameters& operator=(
130*09537850SAkhilesh Sanikop       const FileReaderTestWithTimeStampsParameters&) = delete;
131*09537850SAkhilesh Sanikop   FileReaderTestWithTimeStampsParameters(
132*09537850SAkhilesh Sanikop       FileReaderTestWithTimeStampsParameters&&) = default;
133*09537850SAkhilesh Sanikop   FileReaderTestWithTimeStampsParameters& operator=(
134*09537850SAkhilesh Sanikop       FileReaderTestWithTimeStampsParameters&&) = default;
135*09537850SAkhilesh Sanikop   ~FileReaderTestWithTimeStampsParameters() = default;
136*09537850SAkhilesh Sanikop 
137*09537850SAkhilesh Sanikop   FileReaderFactory::OpenFunction open_function = nullptr;
138*09537850SAkhilesh Sanikop   const char* file_name = nullptr;
139*09537850SAkhilesh Sanikop   int64_t expected_last_timestamp = 0;
140*09537850SAkhilesh Sanikop };
141*09537850SAkhilesh Sanikop 
142*09537850SAkhilesh Sanikop std::ostream& operator<<(std::ostream& stream,
143*09537850SAkhilesh Sanikop                          const FileReaderTestParameters& parameters);
144*09537850SAkhilesh Sanikop 
145*09537850SAkhilesh Sanikop std::ostream& operator<<(
146*09537850SAkhilesh Sanikop     std::ostream& stream,
147*09537850SAkhilesh Sanikop     const FileReaderTestWithTimeStampsParameters& parameters);
148*09537850SAkhilesh Sanikop 
149*09537850SAkhilesh Sanikop class FileReaderTestWithTimeStamps
150*09537850SAkhilesh Sanikop     : public FileReaderTestBase,
151*09537850SAkhilesh Sanikop       public testing::TestWithParam<FileReaderTestWithTimeStampsParameters> {
152*09537850SAkhilesh Sanikop  public:
153*09537850SAkhilesh Sanikop   FileReaderTestWithTimeStamps() = default;
154*09537850SAkhilesh Sanikop   FileReaderTestWithTimeStamps(const FileReaderTestWithTimeStamps&) = delete;
155*09537850SAkhilesh Sanikop   FileReaderTestWithTimeStamps& operator=(const FileReaderTestWithTimeStamps&) =
156*09537850SAkhilesh Sanikop       delete;
157*09537850SAkhilesh Sanikop   ~FileReaderTestWithTimeStamps() override = default;
158*09537850SAkhilesh Sanikop 
159*09537850SAkhilesh Sanikop  protected:
SetUp()160*09537850SAkhilesh Sanikop   void SetUp() override {
161*09537850SAkhilesh Sanikop     FileReaderTestWithTimeStampsParameters parameters = GetParam();
162*09537850SAkhilesh Sanikop     OpenReader(parameters.file_name, parameters.open_function);
163*09537850SAkhilesh Sanikop     expected_last_timestamp_ = parameters.expected_last_timestamp;
164*09537850SAkhilesh Sanikop   }
165*09537850SAkhilesh Sanikop 
166*09537850SAkhilesh Sanikop   int64_t last_timestamp_ = 0;
167*09537850SAkhilesh Sanikop   int64_t expected_last_timestamp_ = 0;
168*09537850SAkhilesh Sanikop };
169*09537850SAkhilesh Sanikop 
170*09537850SAkhilesh Sanikop }  // namespace libgav1
171*09537850SAkhilesh Sanikop #endif  // LIBGAV1_EXAMPLES_FILE_READER_TEST_COMMON_H_
172