blob: a9dddb1eda3d7e6de018934a91fc326ede6e4bd9 [file] [log] [blame]
pbos@webrtc.org788acd12014-12-15 09:41:24 +00001/*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "modules/audio_processing/transient/file_utils.h"
pbos@webrtc.org788acd12014-12-15 09:41:24 +000012
13#include <string.h>
Jonas Olssona4d87372019-07-05 19:08:33 +020014
kwiberg85d8bb02016-02-16 20:39:36 -080015#include <memory>
Yves Gerey665174f2018-06-19 15:03:05 +020016#include <string>
jbauch541f1862016-02-10 09:09:54 -080017#include <vector>
pbos@webrtc.org788acd12014-12-15 09:41:24 +000018
Ali Tofighf3592cb2022-08-16 14:44:38 +020019#include "absl/strings/string_view.h"
Karl Wiberg6a4d4112018-03-23 10:39:34 +010020#include "rtc_base/system/file_wrapper.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020021#include "test/gtest.h"
Steve Anton10542f22019-01-11 09:11:00 -080022#include "test/testsupport/file_utils.h"
pbos@webrtc.org788acd12014-12-15 09:41:24 +000023
24namespace webrtc {
25
26static const uint8_t kPiBytesf[4] = {0xDB, 0x0F, 0x49, 0x40};
27static const uint8_t kEBytesf[4] = {0x54, 0xF8, 0x2D, 0x40};
28static const uint8_t kAvogadroBytesf[4] = {0x2F, 0x0C, 0xFF, 0x66};
29
Yves Gerey665174f2018-06-19 15:03:05 +020030static const uint8_t kPiBytes[8] = {0x18, 0x2D, 0x44, 0x54,
31 0xFB, 0x21, 0x09, 0x40};
32static const uint8_t kEBytes[8] = {0x69, 0x57, 0x14, 0x8B,
33 0x0A, 0xBF, 0x05, 0x40};
34static const uint8_t kAvogadroBytes[8] = {0xF4, 0xBC, 0xA8, 0xDF,
35 0x85, 0xE1, 0xDF, 0x44};
pbos@webrtc.org788acd12014-12-15 09:41:24 +000036
37static const double kPi = 3.14159265358979323846;
38static const double kE = 2.71828182845904523536;
39static const double kAvogadro = 602214100000000000000000.0;
40
Yves Gerey665174f2018-06-19 15:03:05 +020041class TransientFileUtilsTest : public ::testing::Test {
pbos@webrtc.org788acd12014-12-15 09:41:24 +000042 protected:
43 TransientFileUtilsTest()
44 : kTestFileName(
45 test::ResourcePath("audio_processing/transient/double-utils",
46 "dat")),
47 kTestFileNamef(
48 test::ResourcePath("audio_processing/transient/float-utils",
49 "dat")) {}
jbauch541f1862016-02-10 09:09:54 -080050
Yves Gerey665174f2018-06-19 15:03:05 +020051 ~TransientFileUtilsTest() override { CleanupTempFiles(); }
jbauch541f1862016-02-10 09:09:54 -080052
Ali Tofighf3592cb2022-08-16 14:44:38 +020053 std::string CreateTempFilename(absl::string_view dir,
54 absl::string_view prefix) {
jbauch541f1862016-02-10 09:09:54 -080055 std::string filename = test::TempFilename(dir, prefix);
56 temp_filenames_.push_back(filename);
57 return filename;
58 }
59
60 void CleanupTempFiles() {
61 for (const std::string& filename : temp_filenames_) {
62 remove(filename.c_str());
63 }
64 temp_filenames_.clear();
65 }
66
pbos@webrtc.org788acd12014-12-15 09:41:24 +000067 // This file (used in some tests) contains binary data. The data correspond to
68 // the double representation of the constants: Pi, E, and the Avogadro's
69 // Number;
70 // appended in that order.
71 const std::string kTestFileName;
72
73 // This file (used in some tests) contains binary data. The data correspond to
74 // the float representation of the constants: Pi, E, and the Avogadro's
75 // Number;
76 // appended in that order.
77 const std::string kTestFileNamef;
jbauch541f1862016-02-10 09:09:54 -080078
79 // List of temporary filenames created by CreateTempFilename.
80 std::vector<std::string> temp_filenames_;
pbos@webrtc.org788acd12014-12-15 09:41:24 +000081};
82
Peter Boströme2976c82016-01-04 22:44:05 +010083#if defined(WEBRTC_IOS)
84#define MAYBE_ConvertByteArrayToFloat DISABLED_ConvertByteArrayToFloat
85#else
86#define MAYBE_ConvertByteArrayToFloat ConvertByteArrayToFloat
87#endif
88TEST_F(TransientFileUtilsTest, MAYBE_ConvertByteArrayToFloat) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +000089 float value = 0.0;
90
91 EXPECT_EQ(0, ConvertByteArrayToFloat(kPiBytesf, &value));
92 EXPECT_FLOAT_EQ(kPi, value);
93
94 EXPECT_EQ(0, ConvertByteArrayToFloat(kEBytesf, &value));
95 EXPECT_FLOAT_EQ(kE, value);
96
97 EXPECT_EQ(0, ConvertByteArrayToFloat(kAvogadroBytesf, &value));
98 EXPECT_FLOAT_EQ(kAvogadro, value);
99}
100
Peter Boströme2976c82016-01-04 22:44:05 +0100101#if defined(WEBRTC_IOS)
102#define MAYBE_ConvertByteArrayToDouble DISABLED_ConvertByteArrayToDouble
103#else
104#define MAYBE_ConvertByteArrayToDouble ConvertByteArrayToDouble
105#endif
106TEST_F(TransientFileUtilsTest, MAYBE_ConvertByteArrayToDouble) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000107 double value = 0.0;
108
109 EXPECT_EQ(0, ConvertByteArrayToDouble(kPiBytes, &value));
110 EXPECT_DOUBLE_EQ(kPi, value);
111
112 EXPECT_EQ(0, ConvertByteArrayToDouble(kEBytes, &value));
113 EXPECT_DOUBLE_EQ(kE, value);
114
115 EXPECT_EQ(0, ConvertByteArrayToDouble(kAvogadroBytes, &value));
116 EXPECT_DOUBLE_EQ(kAvogadro, value);
117}
118
Peter Boströme2976c82016-01-04 22:44:05 +0100119#if defined(WEBRTC_IOS)
120#define MAYBE_ConvertFloatToByteArray DISABLED_ConvertFloatToByteArray
121#else
122#define MAYBE_ConvertFloatToByteArray ConvertFloatToByteArray
123#endif
124TEST_F(TransientFileUtilsTest, MAYBE_ConvertFloatToByteArray) {
kwiberg85d8bb02016-02-16 20:39:36 -0800125 std::unique_ptr<uint8_t[]> bytes(new uint8_t[4]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000126
127 EXPECT_EQ(0, ConvertFloatToByteArray(kPi, bytes.get()));
128 EXPECT_EQ(0, memcmp(bytes.get(), kPiBytesf, 4));
129
130 EXPECT_EQ(0, ConvertFloatToByteArray(kE, bytes.get()));
131 EXPECT_EQ(0, memcmp(bytes.get(), kEBytesf, 4));
132
133 EXPECT_EQ(0, ConvertFloatToByteArray(kAvogadro, bytes.get()));
134 EXPECT_EQ(0, memcmp(bytes.get(), kAvogadroBytesf, 4));
135}
136
Peter Boströme2976c82016-01-04 22:44:05 +0100137#if defined(WEBRTC_IOS)
138#define MAYBE_ConvertDoubleToByteArray DISABLED_ConvertDoubleToByteArray
139#else
140#define MAYBE_ConvertDoubleToByteArray ConvertDoubleToByteArray
141#endif
142TEST_F(TransientFileUtilsTest, MAYBE_ConvertDoubleToByteArray) {
kwiberg85d8bb02016-02-16 20:39:36 -0800143 std::unique_ptr<uint8_t[]> bytes(new uint8_t[8]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000144
145 EXPECT_EQ(0, ConvertDoubleToByteArray(kPi, bytes.get()));
146 EXPECT_EQ(0, memcmp(bytes.get(), kPiBytes, 8));
147
148 EXPECT_EQ(0, ConvertDoubleToByteArray(kE, bytes.get()));
149 EXPECT_EQ(0, memcmp(bytes.get(), kEBytes, 8));
150
151 EXPECT_EQ(0, ConvertDoubleToByteArray(kAvogadro, bytes.get()));
152 EXPECT_EQ(0, memcmp(bytes.get(), kAvogadroBytes, 8));
153}
154
Peter Boströme2976c82016-01-04 22:44:05 +0100155#if defined(WEBRTC_IOS)
156#define MAYBE_ReadInt16BufferFromFile DISABLED_ReadInt16BufferFromFile
157#else
158#define MAYBE_ReadInt16BufferFromFile ReadInt16BufferFromFile
159#endif
160TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16BufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000161 std::string test_filename = kTestFileName;
162
Ali Tofigh2ab914c2022-04-13 12:55:15 +0200163 FileWrapper file = FileWrapper::OpenReadOnly(test_filename);
Niels Möller5a6ae022019-01-21 11:59:10 +0100164 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
165 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000166
167 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800168 std::unique_ptr<int16_t[]> buffer(new int16_t[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000169
Yves Gerey665174f2018-06-19 15:03:05 +0200170 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100171 ReadInt16BufferFromFile(&file, kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000172 EXPECT_EQ(22377, buffer[4]);
173 EXPECT_EQ(16389, buffer[7]);
174 EXPECT_EQ(17631, buffer[kBufferLength - 1]);
175
Niels Möller5a6ae022019-01-21 11:59:10 +0100176 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000177
178 // The next test is for checking the case where there are not as much data as
179 // needed in the file, but reads to the end, and it returns the number of
180 // int16s read.
181 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
182 buffer.reset(new int16_t[kBufferLenghtLargerThanFile]);
Yves Gerey665174f2018-06-19 15:03:05 +0200183 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100184 ReadInt16BufferFromFile(&file, kBufferLenghtLargerThanFile,
Yves Gerey665174f2018-06-19 15:03:05 +0200185 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000186 EXPECT_EQ(11544, buffer[0]);
187 EXPECT_EQ(22377, buffer[4]);
188 EXPECT_EQ(16389, buffer[7]);
189 EXPECT_EQ(17631, buffer[kBufferLength - 1]);
190}
191
Peter Boströme2976c82016-01-04 22:44:05 +0100192#if defined(WEBRTC_IOS)
193#define MAYBE_ReadInt16FromFileToFloatBuffer \
194 DISABLED_ReadInt16FromFileToFloatBuffer
195#else
196#define MAYBE_ReadInt16FromFileToFloatBuffer ReadInt16FromFileToFloatBuffer
197#endif
198TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16FromFileToFloatBuffer) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000199 std::string test_filename = kTestFileName;
200
Ali Tofigh2ab914c2022-04-13 12:55:15 +0200201 FileWrapper file = FileWrapper::OpenReadOnly(test_filename);
Niels Möller5a6ae022019-01-21 11:59:10 +0100202 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
203 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000204
205 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800206 std::unique_ptr<float[]> buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000207
Niels Möller5a6ae022019-01-21 11:59:10 +0100208 EXPECT_EQ(kBufferLength,
209 ReadInt16FromFileToFloatBuffer(&file, kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000210
211 EXPECT_DOUBLE_EQ(11544, buffer[0]);
212 EXPECT_DOUBLE_EQ(22377, buffer[4]);
213 EXPECT_DOUBLE_EQ(16389, buffer[7]);
214 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
215
Niels Möller5a6ae022019-01-21 11:59:10 +0100216 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000217
218 // The next test is for checking the case where there are not as much data as
219 // needed in the file, but reads to the end, and it returns the number of
220 // int16s read.
221 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
222 buffer.reset(new float[kBufferLenghtLargerThanFile]);
223 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100224 ReadInt16FromFileToFloatBuffer(&file, kBufferLenghtLargerThanFile,
225 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000226 EXPECT_DOUBLE_EQ(11544, buffer[0]);
227 EXPECT_DOUBLE_EQ(22377, buffer[4]);
228 EXPECT_DOUBLE_EQ(16389, buffer[7]);
229 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
230}
231
Peter Boströme2976c82016-01-04 22:44:05 +0100232#if defined(WEBRTC_IOS)
233#define MAYBE_ReadInt16FromFileToDoubleBuffer \
234 DISABLED_ReadInt16FromFileToDoubleBuffer
235#else
236#define MAYBE_ReadInt16FromFileToDoubleBuffer ReadInt16FromFileToDoubleBuffer
237#endif
238TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16FromFileToDoubleBuffer) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000239 std::string test_filename = kTestFileName;
240
Ali Tofigh2ab914c2022-04-13 12:55:15 +0200241 FileWrapper file = FileWrapper::OpenReadOnly(test_filename);
Niels Möller5a6ae022019-01-21 11:59:10 +0100242 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
243 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000244
245 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800246 std::unique_ptr<double[]> buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000247
Niels Möller5a6ae022019-01-21 11:59:10 +0100248 EXPECT_EQ(kBufferLength, ReadInt16FromFileToDoubleBuffer(&file, kBufferLength,
249 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000250 EXPECT_DOUBLE_EQ(11544, buffer[0]);
251 EXPECT_DOUBLE_EQ(22377, buffer[4]);
252 EXPECT_DOUBLE_EQ(16389, buffer[7]);
253 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
254
Niels Möller5a6ae022019-01-21 11:59:10 +0100255 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000256
257 // The next test is for checking the case where there are not as much data as
258 // needed in the file, but reads to the end, and it returns the number of
259 // int16s read.
260 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
261 buffer.reset(new double[kBufferLenghtLargerThanFile]);
262 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100263 ReadInt16FromFileToDoubleBuffer(&file, kBufferLenghtLargerThanFile,
264 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000265 EXPECT_DOUBLE_EQ(11544, buffer[0]);
266 EXPECT_DOUBLE_EQ(22377, buffer[4]);
267 EXPECT_DOUBLE_EQ(16389, buffer[7]);
268 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
269}
270
Peter Boströme2976c82016-01-04 22:44:05 +0100271#if defined(WEBRTC_IOS)
272#define MAYBE_ReadFloatBufferFromFile DISABLED_ReadFloatBufferFromFile
273#else
274#define MAYBE_ReadFloatBufferFromFile ReadFloatBufferFromFile
275#endif
276TEST_F(TransientFileUtilsTest, MAYBE_ReadFloatBufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000277 std::string test_filename = kTestFileNamef;
278
Ali Tofigh2ab914c2022-04-13 12:55:15 +0200279 FileWrapper file = FileWrapper::OpenReadOnly(test_filename);
Niels Möller5a6ae022019-01-21 11:59:10 +0100280 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
281 << kTestFileNamef.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000282
283 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800284 std::unique_ptr<float[]> buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000285
Yves Gerey665174f2018-06-19 15:03:05 +0200286 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100287 ReadFloatBufferFromFile(&file, kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000288 EXPECT_FLOAT_EQ(kPi, buffer[0]);
289 EXPECT_FLOAT_EQ(kE, buffer[1]);
290 EXPECT_FLOAT_EQ(kAvogadro, buffer[2]);
291
Niels Möller5a6ae022019-01-21 11:59:10 +0100292 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000293
294 // The next test is for checking the case where there are not as much data as
295 // needed in the file, but reads to the end, and it returns the number of
296 // doubles read.
297 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
298 buffer.reset(new float[kBufferLenghtLargerThanFile]);
Yves Gerey665174f2018-06-19 15:03:05 +0200299 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100300 ReadFloatBufferFromFile(&file, kBufferLenghtLargerThanFile,
Yves Gerey665174f2018-06-19 15:03:05 +0200301 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000302 EXPECT_FLOAT_EQ(kPi, buffer[0]);
303 EXPECT_FLOAT_EQ(kE, buffer[1]);
304 EXPECT_FLOAT_EQ(kAvogadro, buffer[2]);
305}
306
Peter Boströme2976c82016-01-04 22:44:05 +0100307#if defined(WEBRTC_IOS)
308#define MAYBE_ReadDoubleBufferFromFile DISABLED_ReadDoubleBufferFromFile
309#else
310#define MAYBE_ReadDoubleBufferFromFile ReadDoubleBufferFromFile
311#endif
312TEST_F(TransientFileUtilsTest, MAYBE_ReadDoubleBufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000313 std::string test_filename = kTestFileName;
314
Ali Tofigh2ab914c2022-04-13 12:55:15 +0200315 FileWrapper file = FileWrapper::OpenReadOnly(test_filename);
Niels Möller5a6ae022019-01-21 11:59:10 +0100316 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
317 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000318
319 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800320 std::unique_ptr<double[]> buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000321
Yves Gerey665174f2018-06-19 15:03:05 +0200322 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100323 ReadDoubleBufferFromFile(&file, kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000324 EXPECT_DOUBLE_EQ(kPi, buffer[0]);
325 EXPECT_DOUBLE_EQ(kE, buffer[1]);
326 EXPECT_DOUBLE_EQ(kAvogadro, buffer[2]);
327
Niels Möller5a6ae022019-01-21 11:59:10 +0100328 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000329
330 // The next test is for checking the case where there are not as much data as
331 // needed in the file, but reads to the end, and it returns the number of
332 // doubles read.
333 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
334 buffer.reset(new double[kBufferLenghtLargerThanFile]);
Yves Gerey665174f2018-06-19 15:03:05 +0200335 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100336 ReadDoubleBufferFromFile(&file, kBufferLenghtLargerThanFile,
Yves Gerey665174f2018-06-19 15:03:05 +0200337 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000338 EXPECT_DOUBLE_EQ(kPi, buffer[0]);
339 EXPECT_DOUBLE_EQ(kE, buffer[1]);
340 EXPECT_DOUBLE_EQ(kAvogadro, buffer[2]);
341}
342
Peter Boströme2976c82016-01-04 22:44:05 +0100343#if defined(WEBRTC_IOS)
344#define MAYBE_WriteInt16BufferToFile DISABLED_WriteInt16BufferToFile
345#else
346#define MAYBE_WriteInt16BufferToFile WriteInt16BufferToFile
347#endif
348TEST_F(TransientFileUtilsTest, MAYBE_WriteInt16BufferToFile) {
Yves Gerey665174f2018-06-19 15:03:05 +0200349 std::string kOutFileName =
350 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000351
Ali Tofigh2ab914c2022-04-13 12:55:15 +0200352 FileWrapper file = FileWrapper::OpenWriteOnly(kOutFileName);
Niels Möller5a6ae022019-01-21 11:59:10 +0100353 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
354 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000355
356 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800357 std::unique_ptr<int16_t[]> written_buffer(new int16_t[kBufferLength]);
358 std::unique_ptr<int16_t[]> read_buffer(new int16_t[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000359
360 written_buffer[0] = 1;
361 written_buffer[1] = 2;
362 written_buffer[2] = 3;
363
Niels Möller5a6ae022019-01-21 11:59:10 +0100364 EXPECT_EQ(kBufferLength,
365 WriteInt16BufferToFile(&file, kBufferLength, written_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000366
Niels Möller5a6ae022019-01-21 11:59:10 +0100367 file.Close();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000368
Ali Tofigh2ab914c2022-04-13 12:55:15 +0200369 file = FileWrapper::OpenReadOnly(kOutFileName);
Niels Möller5a6ae022019-01-21 11:59:10 +0100370 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
371 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000372
Niels Möller5a6ae022019-01-21 11:59:10 +0100373 EXPECT_EQ(kBufferLength,
374 ReadInt16BufferFromFile(&file, kBufferLength, read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200375 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000376 kBufferLength * sizeof(written_buffer[0])));
377}
378
Peter Boströme2976c82016-01-04 22:44:05 +0100379#if defined(WEBRTC_IOS)
380#define MAYBE_WriteFloatBufferToFile DISABLED_WriteFloatBufferToFile
381#else
382#define MAYBE_WriteFloatBufferToFile WriteFloatBufferToFile
383#endif
384TEST_F(TransientFileUtilsTest, MAYBE_WriteFloatBufferToFile) {
Yves Gerey665174f2018-06-19 15:03:05 +0200385 std::string kOutFileName =
386 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000387
Ali Tofigh2ab914c2022-04-13 12:55:15 +0200388 FileWrapper file = FileWrapper::OpenWriteOnly(kOutFileName);
Niels Möller5a6ae022019-01-21 11:59:10 +0100389 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
390 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000391
392 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800393 std::unique_ptr<float[]> written_buffer(new float[kBufferLength]);
394 std::unique_ptr<float[]> read_buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000395
conceptgenesis3f705622016-01-30 14:40:44 -0800396 written_buffer[0] = static_cast<float>(kPi);
397 written_buffer[1] = static_cast<float>(kE);
398 written_buffer[2] = static_cast<float>(kAvogadro);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000399
Niels Möller5a6ae022019-01-21 11:59:10 +0100400 EXPECT_EQ(kBufferLength,
401 WriteFloatBufferToFile(&file, kBufferLength, written_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000402
Niels Möller5a6ae022019-01-21 11:59:10 +0100403 file.Close();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000404
Ali Tofigh2ab914c2022-04-13 12:55:15 +0200405 file = FileWrapper::OpenReadOnly(kOutFileName);
Niels Möller5a6ae022019-01-21 11:59:10 +0100406 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
407 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000408
Niels Möller5a6ae022019-01-21 11:59:10 +0100409 EXPECT_EQ(kBufferLength,
410 ReadFloatBufferFromFile(&file, kBufferLength, read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200411 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000412 kBufferLength * sizeof(written_buffer[0])));
413}
414
Peter Boströme2976c82016-01-04 22:44:05 +0100415#if defined(WEBRTC_IOS)
416#define MAYBE_WriteDoubleBufferToFile DISABLED_WriteDoubleBufferToFile
417#else
418#define MAYBE_WriteDoubleBufferToFile WriteDoubleBufferToFile
419#endif
420TEST_F(TransientFileUtilsTest, MAYBE_WriteDoubleBufferToFile) {
Yves Gerey665174f2018-06-19 15:03:05 +0200421 std::string kOutFileName =
422 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000423
Ali Tofigh2ab914c2022-04-13 12:55:15 +0200424 FileWrapper file = FileWrapper::OpenWriteOnly(kOutFileName);
Niels Möller5a6ae022019-01-21 11:59:10 +0100425 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
426 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000427
428 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800429 std::unique_ptr<double[]> written_buffer(new double[kBufferLength]);
430 std::unique_ptr<double[]> read_buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000431
432 written_buffer[0] = kPi;
433 written_buffer[1] = kE;
434 written_buffer[2] = kAvogadro;
435
Niels Möller5a6ae022019-01-21 11:59:10 +0100436 EXPECT_EQ(kBufferLength, WriteDoubleBufferToFile(&file, kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000437 written_buffer.get()));
438
Niels Möller5a6ae022019-01-21 11:59:10 +0100439 file.Close();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000440
Ali Tofigh2ab914c2022-04-13 12:55:15 +0200441 file = FileWrapper::OpenReadOnly(kOutFileName);
Niels Möller5a6ae022019-01-21 11:59:10 +0100442 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
443 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000444
Niels Möller5a6ae022019-01-21 11:59:10 +0100445 EXPECT_EQ(kBufferLength,
446 ReadDoubleBufferFromFile(&file, kBufferLength, read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200447 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000448 kBufferLength * sizeof(written_buffer[0])));
449}
450
Peter Boströme2976c82016-01-04 22:44:05 +0100451#if defined(WEBRTC_IOS)
452#define MAYBE_ExpectedErrorReturnValues DISABLED_ExpectedErrorReturnValues
453#else
454#define MAYBE_ExpectedErrorReturnValues ExpectedErrorReturnValues
455#endif
456TEST_F(TransientFileUtilsTest, MAYBE_ExpectedErrorReturnValues) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000457 std::string test_filename = kTestFileName;
458
459 double value;
kwiberg85d8bb02016-02-16 20:39:36 -0800460 std::unique_ptr<int16_t[]> int16_buffer(new int16_t[1]);
461 std::unique_ptr<double[]> double_buffer(new double[1]);
Niels Möller5a6ae022019-01-21 11:59:10 +0100462 FileWrapper file;
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000463
464 EXPECT_EQ(-1, ConvertByteArrayToDouble(NULL, &value));
465 EXPECT_EQ(-1, ConvertByteArrayToDouble(kPiBytes, NULL));
466
467 EXPECT_EQ(-1, ConvertDoubleToByteArray(kPi, NULL));
468
469 // Tests with file not opened.
Niels Möller5a6ae022019-01-21 11:59:10 +0100470 EXPECT_EQ(0u, ReadInt16BufferFromFile(&file, 1, int16_buffer.get()));
471 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(&file, 1, double_buffer.get()));
472 EXPECT_EQ(0u, ReadDoubleBufferFromFile(&file, 1, double_buffer.get()));
473 EXPECT_EQ(0u, WriteInt16BufferToFile(&file, 1, int16_buffer.get()));
474 EXPECT_EQ(0u, WriteDoubleBufferToFile(&file, 1, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000475
Ali Tofigh2ab914c2022-04-13 12:55:15 +0200476 file = FileWrapper::OpenReadOnly(test_filename);
Niels Möller5a6ae022019-01-21 11:59:10 +0100477 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
478 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000479
480 EXPECT_EQ(0u, ReadInt16BufferFromFile(NULL, 1, int16_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100481 EXPECT_EQ(0u, ReadInt16BufferFromFile(&file, 1, NULL));
482 EXPECT_EQ(0u, ReadInt16BufferFromFile(&file, 0, int16_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000483
484 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(NULL, 1, double_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100485 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(&file, 1, NULL));
486 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(&file, 0, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000487
488 EXPECT_EQ(0u, ReadDoubleBufferFromFile(NULL, 1, double_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100489 EXPECT_EQ(0u, ReadDoubleBufferFromFile(&file, 1, NULL));
490 EXPECT_EQ(0u, ReadDoubleBufferFromFile(&file, 0, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000491
492 EXPECT_EQ(0u, WriteInt16BufferToFile(NULL, 1, int16_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100493 EXPECT_EQ(0u, WriteInt16BufferToFile(&file, 1, NULL));
494 EXPECT_EQ(0u, WriteInt16BufferToFile(&file, 0, int16_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000495
496 EXPECT_EQ(0u, WriteDoubleBufferToFile(NULL, 1, double_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100497 EXPECT_EQ(0u, WriteDoubleBufferToFile(&file, 1, NULL));
498 EXPECT_EQ(0u, WriteDoubleBufferToFile(&file, 0, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000499}
500
501} // namespace webrtc