blob: ced06b197df75d37b187665e59ea33c66b6431d4 [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>
kwiberg85d8bb02016-02-16 20:39:36 -080014#include <memory>
Yves Gerey665174f2018-06-19 15:03:05 +020015#include <string>
jbauch541f1862016-02-10 09:09:54 -080016#include <vector>
pbos@webrtc.org788acd12014-12-15 09:41:24 +000017
Karl Wiberg6a4d4112018-03-23 10:39:34 +010018#include "rtc_base/system/file_wrapper.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020019#include "test/gtest.h"
Steve Anton10542f22019-01-11 09:11:00 -080020#include "test/testsupport/file_utils.h"
pbos@webrtc.org788acd12014-12-15 09:41:24 +000021
22namespace webrtc {
23
24static const uint8_t kPiBytesf[4] = {0xDB, 0x0F, 0x49, 0x40};
25static const uint8_t kEBytesf[4] = {0x54, 0xF8, 0x2D, 0x40};
26static const uint8_t kAvogadroBytesf[4] = {0x2F, 0x0C, 0xFF, 0x66};
27
Yves Gerey665174f2018-06-19 15:03:05 +020028static const uint8_t kPiBytes[8] = {0x18, 0x2D, 0x44, 0x54,
29 0xFB, 0x21, 0x09, 0x40};
30static const uint8_t kEBytes[8] = {0x69, 0x57, 0x14, 0x8B,
31 0x0A, 0xBF, 0x05, 0x40};
32static const uint8_t kAvogadroBytes[8] = {0xF4, 0xBC, 0xA8, 0xDF,
33 0x85, 0xE1, 0xDF, 0x44};
pbos@webrtc.org788acd12014-12-15 09:41:24 +000034
35static const double kPi = 3.14159265358979323846;
36static const double kE = 2.71828182845904523536;
37static const double kAvogadro = 602214100000000000000000.0;
38
Yves Gerey665174f2018-06-19 15:03:05 +020039class TransientFileUtilsTest : public ::testing::Test {
pbos@webrtc.org788acd12014-12-15 09:41:24 +000040 protected:
41 TransientFileUtilsTest()
42 : kTestFileName(
43 test::ResourcePath("audio_processing/transient/double-utils",
44 "dat")),
45 kTestFileNamef(
46 test::ResourcePath("audio_processing/transient/float-utils",
47 "dat")) {}
jbauch541f1862016-02-10 09:09:54 -080048
Yves Gerey665174f2018-06-19 15:03:05 +020049 ~TransientFileUtilsTest() override { CleanupTempFiles(); }
jbauch541f1862016-02-10 09:09:54 -080050
51 std::string CreateTempFilename(const std::string& dir,
Yves Gerey665174f2018-06-19 15:03:05 +020052 const std::string& prefix) {
jbauch541f1862016-02-10 09:09:54 -080053 std::string filename = test::TempFilename(dir, prefix);
54 temp_filenames_.push_back(filename);
55 return filename;
56 }
57
58 void CleanupTempFiles() {
59 for (const std::string& filename : temp_filenames_) {
60 remove(filename.c_str());
61 }
62 temp_filenames_.clear();
63 }
64
pbos@webrtc.org788acd12014-12-15 09:41:24 +000065 // This file (used in some tests) contains binary data. The data correspond to
66 // the double representation of the constants: Pi, E, and the Avogadro's
67 // Number;
68 // appended in that order.
69 const std::string kTestFileName;
70
71 // This file (used in some tests) contains binary data. The data correspond to
72 // the float representation of the constants: Pi, E, and the Avogadro's
73 // Number;
74 // appended in that order.
75 const std::string kTestFileNamef;
jbauch541f1862016-02-10 09:09:54 -080076
77 // List of temporary filenames created by CreateTempFilename.
78 std::vector<std::string> temp_filenames_;
pbos@webrtc.org788acd12014-12-15 09:41:24 +000079};
80
Peter Boströme2976c82016-01-04 22:44:05 +010081#if defined(WEBRTC_IOS)
82#define MAYBE_ConvertByteArrayToFloat DISABLED_ConvertByteArrayToFloat
83#else
84#define MAYBE_ConvertByteArrayToFloat ConvertByteArrayToFloat
85#endif
86TEST_F(TransientFileUtilsTest, MAYBE_ConvertByteArrayToFloat) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +000087 float value = 0.0;
88
89 EXPECT_EQ(0, ConvertByteArrayToFloat(kPiBytesf, &value));
90 EXPECT_FLOAT_EQ(kPi, value);
91
92 EXPECT_EQ(0, ConvertByteArrayToFloat(kEBytesf, &value));
93 EXPECT_FLOAT_EQ(kE, value);
94
95 EXPECT_EQ(0, ConvertByteArrayToFloat(kAvogadroBytesf, &value));
96 EXPECT_FLOAT_EQ(kAvogadro, value);
97}
98
Peter Boströme2976c82016-01-04 22:44:05 +010099#if defined(WEBRTC_IOS)
100#define MAYBE_ConvertByteArrayToDouble DISABLED_ConvertByteArrayToDouble
101#else
102#define MAYBE_ConvertByteArrayToDouble ConvertByteArrayToDouble
103#endif
104TEST_F(TransientFileUtilsTest, MAYBE_ConvertByteArrayToDouble) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000105 double value = 0.0;
106
107 EXPECT_EQ(0, ConvertByteArrayToDouble(kPiBytes, &value));
108 EXPECT_DOUBLE_EQ(kPi, value);
109
110 EXPECT_EQ(0, ConvertByteArrayToDouble(kEBytes, &value));
111 EXPECT_DOUBLE_EQ(kE, value);
112
113 EXPECT_EQ(0, ConvertByteArrayToDouble(kAvogadroBytes, &value));
114 EXPECT_DOUBLE_EQ(kAvogadro, value);
115}
116
Peter Boströme2976c82016-01-04 22:44:05 +0100117#if defined(WEBRTC_IOS)
118#define MAYBE_ConvertFloatToByteArray DISABLED_ConvertFloatToByteArray
119#else
120#define MAYBE_ConvertFloatToByteArray ConvertFloatToByteArray
121#endif
122TEST_F(TransientFileUtilsTest, MAYBE_ConvertFloatToByteArray) {
kwiberg85d8bb02016-02-16 20:39:36 -0800123 std::unique_ptr<uint8_t[]> bytes(new uint8_t[4]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000124
125 EXPECT_EQ(0, ConvertFloatToByteArray(kPi, bytes.get()));
126 EXPECT_EQ(0, memcmp(bytes.get(), kPiBytesf, 4));
127
128 EXPECT_EQ(0, ConvertFloatToByteArray(kE, bytes.get()));
129 EXPECT_EQ(0, memcmp(bytes.get(), kEBytesf, 4));
130
131 EXPECT_EQ(0, ConvertFloatToByteArray(kAvogadro, bytes.get()));
132 EXPECT_EQ(0, memcmp(bytes.get(), kAvogadroBytesf, 4));
133}
134
Peter Boströme2976c82016-01-04 22:44:05 +0100135#if defined(WEBRTC_IOS)
136#define MAYBE_ConvertDoubleToByteArray DISABLED_ConvertDoubleToByteArray
137#else
138#define MAYBE_ConvertDoubleToByteArray ConvertDoubleToByteArray
139#endif
140TEST_F(TransientFileUtilsTest, MAYBE_ConvertDoubleToByteArray) {
kwiberg85d8bb02016-02-16 20:39:36 -0800141 std::unique_ptr<uint8_t[]> bytes(new uint8_t[8]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000142
143 EXPECT_EQ(0, ConvertDoubleToByteArray(kPi, bytes.get()));
144 EXPECT_EQ(0, memcmp(bytes.get(), kPiBytes, 8));
145
146 EXPECT_EQ(0, ConvertDoubleToByteArray(kE, bytes.get()));
147 EXPECT_EQ(0, memcmp(bytes.get(), kEBytes, 8));
148
149 EXPECT_EQ(0, ConvertDoubleToByteArray(kAvogadro, bytes.get()));
150 EXPECT_EQ(0, memcmp(bytes.get(), kAvogadroBytes, 8));
151}
152
Peter Boströme2976c82016-01-04 22:44:05 +0100153#if defined(WEBRTC_IOS)
154#define MAYBE_ReadInt16BufferFromFile DISABLED_ReadInt16BufferFromFile
155#else
156#define MAYBE_ReadInt16BufferFromFile ReadInt16BufferFromFile
157#endif
158TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16BufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000159 std::string test_filename = kTestFileName;
160
kwiberg85d8bb02016-02-16 20:39:36 -0800161 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000162
tommia6219cc2016-06-15 10:30:14 -0700163 file->OpenFile(test_filename.c_str(), true); // Read only.
164 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,
171 ReadInt16BufferFromFile(file.get(), 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
176 file->Rewind();
177
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,
184 ReadInt16BufferFromFile(file.get(), kBufferLenghtLargerThanFile,
185 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
kwiberg85d8bb02016-02-16 20:39:36 -0800201 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000202
tommia6219cc2016-06-15 10:30:14 -0700203 file->OpenFile(test_filename.c_str(), true); // Read only.
204 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
205 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000206
207 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800208 std::unique_ptr<float[]> buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000209
Yves Gerey665174f2018-06-19 15:03:05 +0200210 EXPECT_EQ(kBufferLength, ReadInt16FromFileToFloatBuffer(
211 file.get(), kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000212
213 EXPECT_DOUBLE_EQ(11544, buffer[0]);
214 EXPECT_DOUBLE_EQ(22377, buffer[4]);
215 EXPECT_DOUBLE_EQ(16389, buffer[7]);
216 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
217
218 file->Rewind();
219
220 // The next test is for checking the case where there are not as much data as
221 // needed in the file, but reads to the end, and it returns the number of
222 // int16s read.
223 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
224 buffer.reset(new float[kBufferLenghtLargerThanFile]);
225 EXPECT_EQ(kBufferLength,
Yves Gerey665174f2018-06-19 15:03:05 +0200226 ReadInt16FromFileToFloatBuffer(
227 file.get(), kBufferLenghtLargerThanFile, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000228 EXPECT_DOUBLE_EQ(11544, buffer[0]);
229 EXPECT_DOUBLE_EQ(22377, buffer[4]);
230 EXPECT_DOUBLE_EQ(16389, buffer[7]);
231 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
232}
233
Peter Boströme2976c82016-01-04 22:44:05 +0100234#if defined(WEBRTC_IOS)
235#define MAYBE_ReadInt16FromFileToDoubleBuffer \
236 DISABLED_ReadInt16FromFileToDoubleBuffer
237#else
238#define MAYBE_ReadInt16FromFileToDoubleBuffer ReadInt16FromFileToDoubleBuffer
239#endif
240TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16FromFileToDoubleBuffer) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000241 std::string test_filename = kTestFileName;
242
kwiberg85d8bb02016-02-16 20:39:36 -0800243 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000244
tommia6219cc2016-06-15 10:30:14 -0700245 file->OpenFile(test_filename.c_str(), true); // Read only.
246 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
247 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000248
249 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800250 std::unique_ptr<double[]> buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000251
Yves Gerey665174f2018-06-19 15:03:05 +0200252 EXPECT_EQ(kBufferLength, ReadInt16FromFileToDoubleBuffer(
253 file.get(), kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000254 EXPECT_DOUBLE_EQ(11544, buffer[0]);
255 EXPECT_DOUBLE_EQ(22377, buffer[4]);
256 EXPECT_DOUBLE_EQ(16389, buffer[7]);
257 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
258
259 file->Rewind();
260
261 // The next test is for checking the case where there are not as much data as
262 // needed in the file, but reads to the end, and it returns the number of
263 // int16s read.
264 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
265 buffer.reset(new double[kBufferLenghtLargerThanFile]);
266 EXPECT_EQ(kBufferLength,
Yves Gerey665174f2018-06-19 15:03:05 +0200267 ReadInt16FromFileToDoubleBuffer(
268 file.get(), kBufferLenghtLargerThanFile, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000269 EXPECT_DOUBLE_EQ(11544, buffer[0]);
270 EXPECT_DOUBLE_EQ(22377, buffer[4]);
271 EXPECT_DOUBLE_EQ(16389, buffer[7]);
272 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
273}
274
Peter Boströme2976c82016-01-04 22:44:05 +0100275#if defined(WEBRTC_IOS)
276#define MAYBE_ReadFloatBufferFromFile DISABLED_ReadFloatBufferFromFile
277#else
278#define MAYBE_ReadFloatBufferFromFile ReadFloatBufferFromFile
279#endif
280TEST_F(TransientFileUtilsTest, MAYBE_ReadFloatBufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000281 std::string test_filename = kTestFileNamef;
282
kwiberg85d8bb02016-02-16 20:39:36 -0800283 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000284
tommia6219cc2016-06-15 10:30:14 -0700285 file->OpenFile(test_filename.c_str(), true); // Read only.
286 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
287 << kTestFileNamef.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000288
289 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800290 std::unique_ptr<float[]> buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000291
Yves Gerey665174f2018-06-19 15:03:05 +0200292 EXPECT_EQ(kBufferLength,
293 ReadFloatBufferFromFile(file.get(), kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000294 EXPECT_FLOAT_EQ(kPi, buffer[0]);
295 EXPECT_FLOAT_EQ(kE, buffer[1]);
296 EXPECT_FLOAT_EQ(kAvogadro, buffer[2]);
297
298 file->Rewind();
299
300 // The next test is for checking the case where there are not as much data as
301 // needed in the file, but reads to the end, and it returns the number of
302 // doubles read.
303 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
304 buffer.reset(new float[kBufferLenghtLargerThanFile]);
Yves Gerey665174f2018-06-19 15:03:05 +0200305 EXPECT_EQ(kBufferLength,
306 ReadFloatBufferFromFile(file.get(), kBufferLenghtLargerThanFile,
307 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000308 EXPECT_FLOAT_EQ(kPi, buffer[0]);
309 EXPECT_FLOAT_EQ(kE, buffer[1]);
310 EXPECT_FLOAT_EQ(kAvogadro, buffer[2]);
311}
312
Peter Boströme2976c82016-01-04 22:44:05 +0100313#if defined(WEBRTC_IOS)
314#define MAYBE_ReadDoubleBufferFromFile DISABLED_ReadDoubleBufferFromFile
315#else
316#define MAYBE_ReadDoubleBufferFromFile ReadDoubleBufferFromFile
317#endif
318TEST_F(TransientFileUtilsTest, MAYBE_ReadDoubleBufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000319 std::string test_filename = kTestFileName;
320
kwiberg85d8bb02016-02-16 20:39:36 -0800321 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000322
tommia6219cc2016-06-15 10:30:14 -0700323 file->OpenFile(test_filename.c_str(), true); // Read only.
324 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
325 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000326
327 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800328 std::unique_ptr<double[]> buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000329
Yves Gerey665174f2018-06-19 15:03:05 +0200330 EXPECT_EQ(kBufferLength,
331 ReadDoubleBufferFromFile(file.get(), kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000332 EXPECT_DOUBLE_EQ(kPi, buffer[0]);
333 EXPECT_DOUBLE_EQ(kE, buffer[1]);
334 EXPECT_DOUBLE_EQ(kAvogadro, buffer[2]);
335
336 file->Rewind();
337
338 // The next test is for checking the case where there are not as much data as
339 // needed in the file, but reads to the end, and it returns the number of
340 // doubles read.
341 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
342 buffer.reset(new double[kBufferLenghtLargerThanFile]);
Yves Gerey665174f2018-06-19 15:03:05 +0200343 EXPECT_EQ(kBufferLength,
344 ReadDoubleBufferFromFile(file.get(), kBufferLenghtLargerThanFile,
345 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000346 EXPECT_DOUBLE_EQ(kPi, buffer[0]);
347 EXPECT_DOUBLE_EQ(kE, buffer[1]);
348 EXPECT_DOUBLE_EQ(kAvogadro, buffer[2]);
349}
350
Peter Boströme2976c82016-01-04 22:44:05 +0100351#if defined(WEBRTC_IOS)
352#define MAYBE_WriteInt16BufferToFile DISABLED_WriteInt16BufferToFile
353#else
354#define MAYBE_WriteInt16BufferToFile WriteInt16BufferToFile
355#endif
356TEST_F(TransientFileUtilsTest, MAYBE_WriteInt16BufferToFile) {
kwiberg85d8bb02016-02-16 20:39:36 -0800357 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000358
Yves Gerey665174f2018-06-19 15:03:05 +0200359 std::string kOutFileName =
360 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000361
tommia6219cc2016-06-15 10:30:14 -0700362 file->OpenFile(kOutFileName.c_str(), false); // Write mode.
363 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
364 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000365
366 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800367 std::unique_ptr<int16_t[]> written_buffer(new int16_t[kBufferLength]);
368 std::unique_ptr<int16_t[]> read_buffer(new int16_t[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000369
370 written_buffer[0] = 1;
371 written_buffer[1] = 2;
372 written_buffer[2] = 3;
373
Yves Gerey665174f2018-06-19 15:03:05 +0200374 EXPECT_EQ(kBufferLength, WriteInt16BufferToFile(file.get(), kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000375 written_buffer.get()));
376
377 file->CloseFile();
378
tommia6219cc2016-06-15 10:30:14 -0700379 file->OpenFile(kOutFileName.c_str(), true); // Read only.
380 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
381 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000382
Yves Gerey665174f2018-06-19 15:03:05 +0200383 EXPECT_EQ(kBufferLength, ReadInt16BufferFromFile(file.get(), kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000384 read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200385 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000386 kBufferLength * sizeof(written_buffer[0])));
387}
388
Peter Boströme2976c82016-01-04 22:44:05 +0100389#if defined(WEBRTC_IOS)
390#define MAYBE_WriteFloatBufferToFile DISABLED_WriteFloatBufferToFile
391#else
392#define MAYBE_WriteFloatBufferToFile WriteFloatBufferToFile
393#endif
394TEST_F(TransientFileUtilsTest, MAYBE_WriteFloatBufferToFile) {
kwiberg85d8bb02016-02-16 20:39:36 -0800395 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000396
Yves Gerey665174f2018-06-19 15:03:05 +0200397 std::string kOutFileName =
398 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000399
tommia6219cc2016-06-15 10:30:14 -0700400 file->OpenFile(kOutFileName.c_str(), false); // Write mode.
401 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
402 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000403
404 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800405 std::unique_ptr<float[]> written_buffer(new float[kBufferLength]);
406 std::unique_ptr<float[]> read_buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000407
conceptgenesis3f705622016-01-30 14:40:44 -0800408 written_buffer[0] = static_cast<float>(kPi);
409 written_buffer[1] = static_cast<float>(kE);
410 written_buffer[2] = static_cast<float>(kAvogadro);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000411
Yves Gerey665174f2018-06-19 15:03:05 +0200412 EXPECT_EQ(kBufferLength, WriteFloatBufferToFile(file.get(), kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000413 written_buffer.get()));
414
415 file->CloseFile();
416
tommia6219cc2016-06-15 10:30:14 -0700417 file->OpenFile(kOutFileName.c_str(), true); // Read only.
418 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
419 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000420
Yves Gerey665174f2018-06-19 15:03:05 +0200421 EXPECT_EQ(kBufferLength, ReadFloatBufferFromFile(file.get(), kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000422 read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200423 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000424 kBufferLength * sizeof(written_buffer[0])));
425}
426
Peter Boströme2976c82016-01-04 22:44:05 +0100427#if defined(WEBRTC_IOS)
428#define MAYBE_WriteDoubleBufferToFile DISABLED_WriteDoubleBufferToFile
429#else
430#define MAYBE_WriteDoubleBufferToFile WriteDoubleBufferToFile
431#endif
432TEST_F(TransientFileUtilsTest, MAYBE_WriteDoubleBufferToFile) {
kwiberg85d8bb02016-02-16 20:39:36 -0800433 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000434
Yves Gerey665174f2018-06-19 15:03:05 +0200435 std::string kOutFileName =
436 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000437
tommia6219cc2016-06-15 10:30:14 -0700438 file->OpenFile(kOutFileName.c_str(), false); // Write mode.
439 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
440 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000441
442 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800443 std::unique_ptr<double[]> written_buffer(new double[kBufferLength]);
444 std::unique_ptr<double[]> read_buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000445
446 written_buffer[0] = kPi;
447 written_buffer[1] = kE;
448 written_buffer[2] = kAvogadro;
449
Yves Gerey665174f2018-06-19 15:03:05 +0200450 EXPECT_EQ(kBufferLength, WriteDoubleBufferToFile(file.get(), kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000451 written_buffer.get()));
452
453 file->CloseFile();
454
tommia6219cc2016-06-15 10:30:14 -0700455 file->OpenFile(kOutFileName.c_str(), true); // Read only.
456 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
457 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000458
Yves Gerey665174f2018-06-19 15:03:05 +0200459 EXPECT_EQ(kBufferLength, ReadDoubleBufferFromFile(file.get(), kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000460 read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200461 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000462 kBufferLength * sizeof(written_buffer[0])));
463}
464
Peter Boströme2976c82016-01-04 22:44:05 +0100465#if defined(WEBRTC_IOS)
466#define MAYBE_ExpectedErrorReturnValues DISABLED_ExpectedErrorReturnValues
467#else
468#define MAYBE_ExpectedErrorReturnValues ExpectedErrorReturnValues
469#endif
470TEST_F(TransientFileUtilsTest, MAYBE_ExpectedErrorReturnValues) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000471 std::string test_filename = kTestFileName;
472
473 double value;
kwiberg85d8bb02016-02-16 20:39:36 -0800474 std::unique_ptr<int16_t[]> int16_buffer(new int16_t[1]);
475 std::unique_ptr<double[]> double_buffer(new double[1]);
476 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000477
478 EXPECT_EQ(-1, ConvertByteArrayToDouble(NULL, &value));
479 EXPECT_EQ(-1, ConvertByteArrayToDouble(kPiBytes, NULL));
480
481 EXPECT_EQ(-1, ConvertDoubleToByteArray(kPi, NULL));
482
483 // Tests with file not opened.
484 EXPECT_EQ(0u, ReadInt16BufferFromFile(file.get(), 1, int16_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200485 EXPECT_EQ(
486 0u, ReadInt16FromFileToDoubleBuffer(file.get(), 1, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000487 EXPECT_EQ(0u, ReadDoubleBufferFromFile(file.get(), 1, double_buffer.get()));
488 EXPECT_EQ(0u, WriteInt16BufferToFile(file.get(), 1, int16_buffer.get()));
489 EXPECT_EQ(0u, WriteDoubleBufferToFile(file.get(), 1, double_buffer.get()));
490
tommia6219cc2016-06-15 10:30:14 -0700491 file->OpenFile(test_filename.c_str(), true); // Read only.
492 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
493 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000494
495 EXPECT_EQ(0u, ReadInt16BufferFromFile(NULL, 1, int16_buffer.get()));
496 EXPECT_EQ(0u, ReadInt16BufferFromFile(file.get(), 1, NULL));
497 EXPECT_EQ(0u, ReadInt16BufferFromFile(file.get(), 0, int16_buffer.get()));
498
499 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(NULL, 1, double_buffer.get()));
500 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(file.get(), 1, NULL));
Yves Gerey665174f2018-06-19 15:03:05 +0200501 EXPECT_EQ(
502 0u, ReadInt16FromFileToDoubleBuffer(file.get(), 0, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000503
504 EXPECT_EQ(0u, ReadDoubleBufferFromFile(NULL, 1, double_buffer.get()));
505 EXPECT_EQ(0u, ReadDoubleBufferFromFile(file.get(), 1, NULL));
506 EXPECT_EQ(0u, ReadDoubleBufferFromFile(file.get(), 0, double_buffer.get()));
507
508 EXPECT_EQ(0u, WriteInt16BufferToFile(NULL, 1, int16_buffer.get()));
509 EXPECT_EQ(0u, WriteInt16BufferToFile(file.get(), 1, NULL));
510 EXPECT_EQ(0u, WriteInt16BufferToFile(file.get(), 0, int16_buffer.get()));
511
512 EXPECT_EQ(0u, WriteDoubleBufferToFile(NULL, 1, double_buffer.get()));
513 EXPECT_EQ(0u, WriteDoubleBufferToFile(file.get(), 1, NULL));
514 EXPECT_EQ(0u, WriteDoubleBufferToFile(file.get(), 0, double_buffer.get()));
515}
516
517} // namespace webrtc