blob: 05f83411d2c8085b72cf3da55548af3e16b5e1d5 [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"
20#include "test/testsupport/fileutils.h"
Mirko Bonadei71207422017-09-15 13:58:09 +020021#include "typedefs.h" // NOLINT(build/include)
pbos@webrtc.org788acd12014-12-15 09:41:24 +000022
23namespace webrtc {
24
25static const uint8_t kPiBytesf[4] = {0xDB, 0x0F, 0x49, 0x40};
26static const uint8_t kEBytesf[4] = {0x54, 0xF8, 0x2D, 0x40};
27static const uint8_t kAvogadroBytesf[4] = {0x2F, 0x0C, 0xFF, 0x66};
28
Yves Gerey665174f2018-06-19 15:03:05 +020029static const uint8_t kPiBytes[8] = {0x18, 0x2D, 0x44, 0x54,
30 0xFB, 0x21, 0x09, 0x40};
31static const uint8_t kEBytes[8] = {0x69, 0x57, 0x14, 0x8B,
32 0x0A, 0xBF, 0x05, 0x40};
33static const uint8_t kAvogadroBytes[8] = {0xF4, 0xBC, 0xA8, 0xDF,
34 0x85, 0xE1, 0xDF, 0x44};
pbos@webrtc.org788acd12014-12-15 09:41:24 +000035
36static const double kPi = 3.14159265358979323846;
37static const double kE = 2.71828182845904523536;
38static const double kAvogadro = 602214100000000000000000.0;
39
Yves Gerey665174f2018-06-19 15:03:05 +020040class TransientFileUtilsTest : public ::testing::Test {
pbos@webrtc.org788acd12014-12-15 09:41:24 +000041 protected:
42 TransientFileUtilsTest()
43 : kTestFileName(
44 test::ResourcePath("audio_processing/transient/double-utils",
45 "dat")),
46 kTestFileNamef(
47 test::ResourcePath("audio_processing/transient/float-utils",
48 "dat")) {}
jbauch541f1862016-02-10 09:09:54 -080049
Yves Gerey665174f2018-06-19 15:03:05 +020050 ~TransientFileUtilsTest() override { CleanupTempFiles(); }
jbauch541f1862016-02-10 09:09:54 -080051
52 std::string CreateTempFilename(const std::string& dir,
Yves Gerey665174f2018-06-19 15:03:05 +020053 const std::string& prefix) {
jbauch541f1862016-02-10 09:09:54 -080054 std::string filename = test::TempFilename(dir, prefix);
55 temp_filenames_.push_back(filename);
56 return filename;
57 }
58
59 void CleanupTempFiles() {
60 for (const std::string& filename : temp_filenames_) {
61 remove(filename.c_str());
62 }
63 temp_filenames_.clear();
64 }
65
pbos@webrtc.org788acd12014-12-15 09:41:24 +000066 // This file (used in some tests) contains binary data. The data correspond to
67 // the double representation of the constants: Pi, E, and the Avogadro's
68 // Number;
69 // appended in that order.
70 const std::string kTestFileName;
71
72 // This file (used in some tests) contains binary data. The data correspond to
73 // the float representation of the constants: Pi, E, and the Avogadro's
74 // Number;
75 // appended in that order.
76 const std::string kTestFileNamef;
jbauch541f1862016-02-10 09:09:54 -080077
78 // List of temporary filenames created by CreateTempFilename.
79 std::vector<std::string> temp_filenames_;
pbos@webrtc.org788acd12014-12-15 09:41:24 +000080};
81
Peter Boströme2976c82016-01-04 22:44:05 +010082#if defined(WEBRTC_IOS)
83#define MAYBE_ConvertByteArrayToFloat DISABLED_ConvertByteArrayToFloat
84#else
85#define MAYBE_ConvertByteArrayToFloat ConvertByteArrayToFloat
86#endif
87TEST_F(TransientFileUtilsTest, MAYBE_ConvertByteArrayToFloat) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +000088 float value = 0.0;
89
90 EXPECT_EQ(0, ConvertByteArrayToFloat(kPiBytesf, &value));
91 EXPECT_FLOAT_EQ(kPi, value);
92
93 EXPECT_EQ(0, ConvertByteArrayToFloat(kEBytesf, &value));
94 EXPECT_FLOAT_EQ(kE, value);
95
96 EXPECT_EQ(0, ConvertByteArrayToFloat(kAvogadroBytesf, &value));
97 EXPECT_FLOAT_EQ(kAvogadro, value);
98}
99
Peter Boströme2976c82016-01-04 22:44:05 +0100100#if defined(WEBRTC_IOS)
101#define MAYBE_ConvertByteArrayToDouble DISABLED_ConvertByteArrayToDouble
102#else
103#define MAYBE_ConvertByteArrayToDouble ConvertByteArrayToDouble
104#endif
105TEST_F(TransientFileUtilsTest, MAYBE_ConvertByteArrayToDouble) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000106 double value = 0.0;
107
108 EXPECT_EQ(0, ConvertByteArrayToDouble(kPiBytes, &value));
109 EXPECT_DOUBLE_EQ(kPi, value);
110
111 EXPECT_EQ(0, ConvertByteArrayToDouble(kEBytes, &value));
112 EXPECT_DOUBLE_EQ(kE, value);
113
114 EXPECT_EQ(0, ConvertByteArrayToDouble(kAvogadroBytes, &value));
115 EXPECT_DOUBLE_EQ(kAvogadro, value);
116}
117
Peter Boströme2976c82016-01-04 22:44:05 +0100118#if defined(WEBRTC_IOS)
119#define MAYBE_ConvertFloatToByteArray DISABLED_ConvertFloatToByteArray
120#else
121#define MAYBE_ConvertFloatToByteArray ConvertFloatToByteArray
122#endif
123TEST_F(TransientFileUtilsTest, MAYBE_ConvertFloatToByteArray) {
kwiberg85d8bb02016-02-16 20:39:36 -0800124 std::unique_ptr<uint8_t[]> bytes(new uint8_t[4]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000125
126 EXPECT_EQ(0, ConvertFloatToByteArray(kPi, bytes.get()));
127 EXPECT_EQ(0, memcmp(bytes.get(), kPiBytesf, 4));
128
129 EXPECT_EQ(0, ConvertFloatToByteArray(kE, bytes.get()));
130 EXPECT_EQ(0, memcmp(bytes.get(), kEBytesf, 4));
131
132 EXPECT_EQ(0, ConvertFloatToByteArray(kAvogadro, bytes.get()));
133 EXPECT_EQ(0, memcmp(bytes.get(), kAvogadroBytesf, 4));
134}
135
Peter Boströme2976c82016-01-04 22:44:05 +0100136#if defined(WEBRTC_IOS)
137#define MAYBE_ConvertDoubleToByteArray DISABLED_ConvertDoubleToByteArray
138#else
139#define MAYBE_ConvertDoubleToByteArray ConvertDoubleToByteArray
140#endif
141TEST_F(TransientFileUtilsTest, MAYBE_ConvertDoubleToByteArray) {
kwiberg85d8bb02016-02-16 20:39:36 -0800142 std::unique_ptr<uint8_t[]> bytes(new uint8_t[8]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000143
144 EXPECT_EQ(0, ConvertDoubleToByteArray(kPi, bytes.get()));
145 EXPECT_EQ(0, memcmp(bytes.get(), kPiBytes, 8));
146
147 EXPECT_EQ(0, ConvertDoubleToByteArray(kE, bytes.get()));
148 EXPECT_EQ(0, memcmp(bytes.get(), kEBytes, 8));
149
150 EXPECT_EQ(0, ConvertDoubleToByteArray(kAvogadro, bytes.get()));
151 EXPECT_EQ(0, memcmp(bytes.get(), kAvogadroBytes, 8));
152}
153
Peter Boströme2976c82016-01-04 22:44:05 +0100154#if defined(WEBRTC_IOS)
155#define MAYBE_ReadInt16BufferFromFile DISABLED_ReadInt16BufferFromFile
156#else
157#define MAYBE_ReadInt16BufferFromFile ReadInt16BufferFromFile
158#endif
159TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16BufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000160 std::string test_filename = kTestFileName;
161
kwiberg85d8bb02016-02-16 20:39:36 -0800162 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000163
tommia6219cc2016-06-15 10:30:14 -0700164 file->OpenFile(test_filename.c_str(), true); // Read only.
165 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
166 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000167
168 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800169 std::unique_ptr<int16_t[]> buffer(new int16_t[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000170
Yves Gerey665174f2018-06-19 15:03:05 +0200171 EXPECT_EQ(kBufferLength,
172 ReadInt16BufferFromFile(file.get(), kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000173 EXPECT_EQ(22377, buffer[4]);
174 EXPECT_EQ(16389, buffer[7]);
175 EXPECT_EQ(17631, buffer[kBufferLength - 1]);
176
177 file->Rewind();
178
179 // The next test is for checking the case where there are not as much data as
180 // needed in the file, but reads to the end, and it returns the number of
181 // int16s read.
182 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
183 buffer.reset(new int16_t[kBufferLenghtLargerThanFile]);
Yves Gerey665174f2018-06-19 15:03:05 +0200184 EXPECT_EQ(kBufferLength,
185 ReadInt16BufferFromFile(file.get(), kBufferLenghtLargerThanFile,
186 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000187 EXPECT_EQ(11544, buffer[0]);
188 EXPECT_EQ(22377, buffer[4]);
189 EXPECT_EQ(16389, buffer[7]);
190 EXPECT_EQ(17631, buffer[kBufferLength - 1]);
191}
192
Peter Boströme2976c82016-01-04 22:44:05 +0100193#if defined(WEBRTC_IOS)
194#define MAYBE_ReadInt16FromFileToFloatBuffer \
195 DISABLED_ReadInt16FromFileToFloatBuffer
196#else
197#define MAYBE_ReadInt16FromFileToFloatBuffer ReadInt16FromFileToFloatBuffer
198#endif
199TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16FromFileToFloatBuffer) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000200 std::string test_filename = kTestFileName;
201
kwiberg85d8bb02016-02-16 20:39:36 -0800202 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000203
tommia6219cc2016-06-15 10:30:14 -0700204 file->OpenFile(test_filename.c_str(), true); // Read only.
205 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
206 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000207
208 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800209 std::unique_ptr<float[]> buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000210
Yves Gerey665174f2018-06-19 15:03:05 +0200211 EXPECT_EQ(kBufferLength, ReadInt16FromFileToFloatBuffer(
212 file.get(), kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000213
214 EXPECT_DOUBLE_EQ(11544, buffer[0]);
215 EXPECT_DOUBLE_EQ(22377, buffer[4]);
216 EXPECT_DOUBLE_EQ(16389, buffer[7]);
217 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
218
219 file->Rewind();
220
221 // The next test is for checking the case where there are not as much data as
222 // needed in the file, but reads to the end, and it returns the number of
223 // int16s read.
224 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
225 buffer.reset(new float[kBufferLenghtLargerThanFile]);
226 EXPECT_EQ(kBufferLength,
Yves Gerey665174f2018-06-19 15:03:05 +0200227 ReadInt16FromFileToFloatBuffer(
228 file.get(), kBufferLenghtLargerThanFile, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000229 EXPECT_DOUBLE_EQ(11544, buffer[0]);
230 EXPECT_DOUBLE_EQ(22377, buffer[4]);
231 EXPECT_DOUBLE_EQ(16389, buffer[7]);
232 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
233}
234
Peter Boströme2976c82016-01-04 22:44:05 +0100235#if defined(WEBRTC_IOS)
236#define MAYBE_ReadInt16FromFileToDoubleBuffer \
237 DISABLED_ReadInt16FromFileToDoubleBuffer
238#else
239#define MAYBE_ReadInt16FromFileToDoubleBuffer ReadInt16FromFileToDoubleBuffer
240#endif
241TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16FromFileToDoubleBuffer) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000242 std::string test_filename = kTestFileName;
243
kwiberg85d8bb02016-02-16 20:39:36 -0800244 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000245
tommia6219cc2016-06-15 10:30:14 -0700246 file->OpenFile(test_filename.c_str(), true); // Read only.
247 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
248 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000249
250 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800251 std::unique_ptr<double[]> buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000252
Yves Gerey665174f2018-06-19 15:03:05 +0200253 EXPECT_EQ(kBufferLength, ReadInt16FromFileToDoubleBuffer(
254 file.get(), kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000255 EXPECT_DOUBLE_EQ(11544, buffer[0]);
256 EXPECT_DOUBLE_EQ(22377, buffer[4]);
257 EXPECT_DOUBLE_EQ(16389, buffer[7]);
258 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
259
260 file->Rewind();
261
262 // The next test is for checking the case where there are not as much data as
263 // needed in the file, but reads to the end, and it returns the number of
264 // int16s read.
265 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
266 buffer.reset(new double[kBufferLenghtLargerThanFile]);
267 EXPECT_EQ(kBufferLength,
Yves Gerey665174f2018-06-19 15:03:05 +0200268 ReadInt16FromFileToDoubleBuffer(
269 file.get(), kBufferLenghtLargerThanFile, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000270 EXPECT_DOUBLE_EQ(11544, buffer[0]);
271 EXPECT_DOUBLE_EQ(22377, buffer[4]);
272 EXPECT_DOUBLE_EQ(16389, buffer[7]);
273 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
274}
275
Peter Boströme2976c82016-01-04 22:44:05 +0100276#if defined(WEBRTC_IOS)
277#define MAYBE_ReadFloatBufferFromFile DISABLED_ReadFloatBufferFromFile
278#else
279#define MAYBE_ReadFloatBufferFromFile ReadFloatBufferFromFile
280#endif
281TEST_F(TransientFileUtilsTest, MAYBE_ReadFloatBufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000282 std::string test_filename = kTestFileNamef;
283
kwiberg85d8bb02016-02-16 20:39:36 -0800284 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000285
tommia6219cc2016-06-15 10:30:14 -0700286 file->OpenFile(test_filename.c_str(), true); // Read only.
287 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
288 << kTestFileNamef.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000289
290 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800291 std::unique_ptr<float[]> buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000292
Yves Gerey665174f2018-06-19 15:03:05 +0200293 EXPECT_EQ(kBufferLength,
294 ReadFloatBufferFromFile(file.get(), kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000295 EXPECT_FLOAT_EQ(kPi, buffer[0]);
296 EXPECT_FLOAT_EQ(kE, buffer[1]);
297 EXPECT_FLOAT_EQ(kAvogadro, buffer[2]);
298
299 file->Rewind();
300
301 // The next test is for checking the case where there are not as much data as
302 // needed in the file, but reads to the end, and it returns the number of
303 // doubles read.
304 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
305 buffer.reset(new float[kBufferLenghtLargerThanFile]);
Yves Gerey665174f2018-06-19 15:03:05 +0200306 EXPECT_EQ(kBufferLength,
307 ReadFloatBufferFromFile(file.get(), kBufferLenghtLargerThanFile,
308 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000309 EXPECT_FLOAT_EQ(kPi, buffer[0]);
310 EXPECT_FLOAT_EQ(kE, buffer[1]);
311 EXPECT_FLOAT_EQ(kAvogadro, buffer[2]);
312}
313
Peter Boströme2976c82016-01-04 22:44:05 +0100314#if defined(WEBRTC_IOS)
315#define MAYBE_ReadDoubleBufferFromFile DISABLED_ReadDoubleBufferFromFile
316#else
317#define MAYBE_ReadDoubleBufferFromFile ReadDoubleBufferFromFile
318#endif
319TEST_F(TransientFileUtilsTest, MAYBE_ReadDoubleBufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000320 std::string test_filename = kTestFileName;
321
kwiberg85d8bb02016-02-16 20:39:36 -0800322 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000323
tommia6219cc2016-06-15 10:30:14 -0700324 file->OpenFile(test_filename.c_str(), true); // Read only.
325 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
326 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000327
328 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800329 std::unique_ptr<double[]> buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000330
Yves Gerey665174f2018-06-19 15:03:05 +0200331 EXPECT_EQ(kBufferLength,
332 ReadDoubleBufferFromFile(file.get(), kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000333 EXPECT_DOUBLE_EQ(kPi, buffer[0]);
334 EXPECT_DOUBLE_EQ(kE, buffer[1]);
335 EXPECT_DOUBLE_EQ(kAvogadro, buffer[2]);
336
337 file->Rewind();
338
339 // The next test is for checking the case where there are not as much data as
340 // needed in the file, but reads to the end, and it returns the number of
341 // doubles read.
342 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
343 buffer.reset(new double[kBufferLenghtLargerThanFile]);
Yves Gerey665174f2018-06-19 15:03:05 +0200344 EXPECT_EQ(kBufferLength,
345 ReadDoubleBufferFromFile(file.get(), kBufferLenghtLargerThanFile,
346 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000347 EXPECT_DOUBLE_EQ(kPi, buffer[0]);
348 EXPECT_DOUBLE_EQ(kE, buffer[1]);
349 EXPECT_DOUBLE_EQ(kAvogadro, buffer[2]);
350}
351
Peter Boströme2976c82016-01-04 22:44:05 +0100352#if defined(WEBRTC_IOS)
353#define MAYBE_WriteInt16BufferToFile DISABLED_WriteInt16BufferToFile
354#else
355#define MAYBE_WriteInt16BufferToFile WriteInt16BufferToFile
356#endif
357TEST_F(TransientFileUtilsTest, MAYBE_WriteInt16BufferToFile) {
kwiberg85d8bb02016-02-16 20:39:36 -0800358 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000359
Yves Gerey665174f2018-06-19 15:03:05 +0200360 std::string kOutFileName =
361 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000362
tommia6219cc2016-06-15 10:30:14 -0700363 file->OpenFile(kOutFileName.c_str(), false); // Write mode.
364 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
365 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000366
367 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800368 std::unique_ptr<int16_t[]> written_buffer(new int16_t[kBufferLength]);
369 std::unique_ptr<int16_t[]> read_buffer(new int16_t[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000370
371 written_buffer[0] = 1;
372 written_buffer[1] = 2;
373 written_buffer[2] = 3;
374
Yves Gerey665174f2018-06-19 15:03:05 +0200375 EXPECT_EQ(kBufferLength, WriteInt16BufferToFile(file.get(), kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000376 written_buffer.get()));
377
378 file->CloseFile();
379
tommia6219cc2016-06-15 10:30:14 -0700380 file->OpenFile(kOutFileName.c_str(), true); // Read only.
381 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
382 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000383
Yves Gerey665174f2018-06-19 15:03:05 +0200384 EXPECT_EQ(kBufferLength, ReadInt16BufferFromFile(file.get(), kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000385 read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200386 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000387 kBufferLength * sizeof(written_buffer[0])));
388}
389
Peter Boströme2976c82016-01-04 22:44:05 +0100390#if defined(WEBRTC_IOS)
391#define MAYBE_WriteFloatBufferToFile DISABLED_WriteFloatBufferToFile
392#else
393#define MAYBE_WriteFloatBufferToFile WriteFloatBufferToFile
394#endif
395TEST_F(TransientFileUtilsTest, MAYBE_WriteFloatBufferToFile) {
kwiberg85d8bb02016-02-16 20:39:36 -0800396 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000397
Yves Gerey665174f2018-06-19 15:03:05 +0200398 std::string kOutFileName =
399 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000400
tommia6219cc2016-06-15 10:30:14 -0700401 file->OpenFile(kOutFileName.c_str(), false); // Write mode.
402 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
403 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000404
405 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800406 std::unique_ptr<float[]> written_buffer(new float[kBufferLength]);
407 std::unique_ptr<float[]> read_buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000408
conceptgenesis3f705622016-01-30 14:40:44 -0800409 written_buffer[0] = static_cast<float>(kPi);
410 written_buffer[1] = static_cast<float>(kE);
411 written_buffer[2] = static_cast<float>(kAvogadro);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000412
Yves Gerey665174f2018-06-19 15:03:05 +0200413 EXPECT_EQ(kBufferLength, WriteFloatBufferToFile(file.get(), kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000414 written_buffer.get()));
415
416 file->CloseFile();
417
tommia6219cc2016-06-15 10:30:14 -0700418 file->OpenFile(kOutFileName.c_str(), true); // Read only.
419 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
420 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000421
Yves Gerey665174f2018-06-19 15:03:05 +0200422 EXPECT_EQ(kBufferLength, ReadFloatBufferFromFile(file.get(), kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000423 read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200424 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000425 kBufferLength * sizeof(written_buffer[0])));
426}
427
Peter Boströme2976c82016-01-04 22:44:05 +0100428#if defined(WEBRTC_IOS)
429#define MAYBE_WriteDoubleBufferToFile DISABLED_WriteDoubleBufferToFile
430#else
431#define MAYBE_WriteDoubleBufferToFile WriteDoubleBufferToFile
432#endif
433TEST_F(TransientFileUtilsTest, MAYBE_WriteDoubleBufferToFile) {
kwiberg85d8bb02016-02-16 20:39:36 -0800434 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000435
Yves Gerey665174f2018-06-19 15:03:05 +0200436 std::string kOutFileName =
437 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000438
tommia6219cc2016-06-15 10:30:14 -0700439 file->OpenFile(kOutFileName.c_str(), false); // Write mode.
440 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
441 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000442
443 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800444 std::unique_ptr<double[]> written_buffer(new double[kBufferLength]);
445 std::unique_ptr<double[]> read_buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000446
447 written_buffer[0] = kPi;
448 written_buffer[1] = kE;
449 written_buffer[2] = kAvogadro;
450
Yves Gerey665174f2018-06-19 15:03:05 +0200451 EXPECT_EQ(kBufferLength, WriteDoubleBufferToFile(file.get(), kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000452 written_buffer.get()));
453
454 file->CloseFile();
455
tommia6219cc2016-06-15 10:30:14 -0700456 file->OpenFile(kOutFileName.c_str(), true); // Read only.
457 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
458 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000459
Yves Gerey665174f2018-06-19 15:03:05 +0200460 EXPECT_EQ(kBufferLength, ReadDoubleBufferFromFile(file.get(), kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000461 read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200462 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000463 kBufferLength * sizeof(written_buffer[0])));
464}
465
Peter Boströme2976c82016-01-04 22:44:05 +0100466#if defined(WEBRTC_IOS)
467#define MAYBE_ExpectedErrorReturnValues DISABLED_ExpectedErrorReturnValues
468#else
469#define MAYBE_ExpectedErrorReturnValues ExpectedErrorReturnValues
470#endif
471TEST_F(TransientFileUtilsTest, MAYBE_ExpectedErrorReturnValues) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000472 std::string test_filename = kTestFileName;
473
474 double value;
kwiberg85d8bb02016-02-16 20:39:36 -0800475 std::unique_ptr<int16_t[]> int16_buffer(new int16_t[1]);
476 std::unique_ptr<double[]> double_buffer(new double[1]);
477 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000478
479 EXPECT_EQ(-1, ConvertByteArrayToDouble(NULL, &value));
480 EXPECT_EQ(-1, ConvertByteArrayToDouble(kPiBytes, NULL));
481
482 EXPECT_EQ(-1, ConvertDoubleToByteArray(kPi, NULL));
483
484 // Tests with file not opened.
485 EXPECT_EQ(0u, ReadInt16BufferFromFile(file.get(), 1, int16_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200486 EXPECT_EQ(
487 0u, ReadInt16FromFileToDoubleBuffer(file.get(), 1, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000488 EXPECT_EQ(0u, ReadDoubleBufferFromFile(file.get(), 1, double_buffer.get()));
489 EXPECT_EQ(0u, WriteInt16BufferToFile(file.get(), 1, int16_buffer.get()));
490 EXPECT_EQ(0u, WriteDoubleBufferToFile(file.get(), 1, double_buffer.get()));
491
tommia6219cc2016-06-15 10:30:14 -0700492 file->OpenFile(test_filename.c_str(), true); // Read only.
493 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
494 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000495
496 EXPECT_EQ(0u, ReadInt16BufferFromFile(NULL, 1, int16_buffer.get()));
497 EXPECT_EQ(0u, ReadInt16BufferFromFile(file.get(), 1, NULL));
498 EXPECT_EQ(0u, ReadInt16BufferFromFile(file.get(), 0, int16_buffer.get()));
499
500 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(NULL, 1, double_buffer.get()));
501 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(file.get(), 1, NULL));
Yves Gerey665174f2018-06-19 15:03:05 +0200502 EXPECT_EQ(
503 0u, ReadInt16FromFileToDoubleBuffer(file.get(), 0, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000504
505 EXPECT_EQ(0u, ReadDoubleBufferFromFile(NULL, 1, double_buffer.get()));
506 EXPECT_EQ(0u, ReadDoubleBufferFromFile(file.get(), 1, NULL));
507 EXPECT_EQ(0u, ReadDoubleBufferFromFile(file.get(), 0, double_buffer.get()));
508
509 EXPECT_EQ(0u, WriteInt16BufferToFile(NULL, 1, int16_buffer.get()));
510 EXPECT_EQ(0u, WriteInt16BufferToFile(file.get(), 1, NULL));
511 EXPECT_EQ(0u, WriteInt16BufferToFile(file.get(), 0, int16_buffer.get()));
512
513 EXPECT_EQ(0u, WriteDoubleBufferToFile(NULL, 1, double_buffer.get()));
514 EXPECT_EQ(0u, WriteDoubleBufferToFile(file.get(), 1, NULL));
515 EXPECT_EQ(0u, WriteDoubleBufferToFile(file.get(), 0, double_buffer.get()));
516}
517
518} // namespace webrtc