blob: d9880f9b859c1c3c3ebf96a1abef6836df580d8c [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>
14#include <string>
kwiberg85d8bb02016-02-16 20:39:36 -080015#include <memory>
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
29static const uint8_t kPiBytes[8] =
30 {0x18, 0x2D, 0x44, 0x54, 0xFB, 0x21, 0x09, 0x40};
31static const uint8_t kEBytes[8] =
32 {0x69, 0x57, 0x14, 0x8B, 0x0A, 0xBF, 0x05, 0x40};
33static const uint8_t kAvogadroBytes[8] =
34 {0xF4, 0xBC, 0xA8, 0xDF, 0x85, 0xE1, 0xDF, 0x44};
35
36static const double kPi = 3.14159265358979323846;
37static const double kE = 2.71828182845904523536;
38static const double kAvogadro = 602214100000000000000000.0;
39
40class TransientFileUtilsTest: public ::testing::Test {
41 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
50 ~TransientFileUtilsTest() override {
51 CleanupTempFiles();
52 }
53
54 std::string CreateTempFilename(const std::string& dir,
55 const std::string& prefix) {
56 std::string filename = test::TempFilename(dir, prefix);
57 temp_filenames_.push_back(filename);
58 return filename;
59 }
60
61 void CleanupTempFiles() {
62 for (const std::string& filename : temp_filenames_) {
63 remove(filename.c_str());
64 }
65 temp_filenames_.clear();
66 }
67
pbos@webrtc.org788acd12014-12-15 09:41:24 +000068 // This file (used in some tests) contains binary data. The data correspond to
69 // the double representation of the constants: Pi, E, and the Avogadro's
70 // Number;
71 // appended in that order.
72 const std::string kTestFileName;
73
74 // This file (used in some tests) contains binary data. The data correspond to
75 // the float representation of the constants: Pi, E, and the Avogadro's
76 // Number;
77 // appended in that order.
78 const std::string kTestFileNamef;
jbauch541f1862016-02-10 09:09:54 -080079
80 // List of temporary filenames created by CreateTempFilename.
81 std::vector<std::string> temp_filenames_;
pbos@webrtc.org788acd12014-12-15 09:41:24 +000082};
83
Peter Boströme2976c82016-01-04 22:44:05 +010084#if defined(WEBRTC_IOS)
85#define MAYBE_ConvertByteArrayToFloat DISABLED_ConvertByteArrayToFloat
86#else
87#define MAYBE_ConvertByteArrayToFloat ConvertByteArrayToFloat
88#endif
89TEST_F(TransientFileUtilsTest, MAYBE_ConvertByteArrayToFloat) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +000090 float value = 0.0;
91
92 EXPECT_EQ(0, ConvertByteArrayToFloat(kPiBytesf, &value));
93 EXPECT_FLOAT_EQ(kPi, value);
94
95 EXPECT_EQ(0, ConvertByteArrayToFloat(kEBytesf, &value));
96 EXPECT_FLOAT_EQ(kE, value);
97
98 EXPECT_EQ(0, ConvertByteArrayToFloat(kAvogadroBytesf, &value));
99 EXPECT_FLOAT_EQ(kAvogadro, value);
100}
101
Peter Boströme2976c82016-01-04 22:44:05 +0100102#if defined(WEBRTC_IOS)
103#define MAYBE_ConvertByteArrayToDouble DISABLED_ConvertByteArrayToDouble
104#else
105#define MAYBE_ConvertByteArrayToDouble ConvertByteArrayToDouble
106#endif
107TEST_F(TransientFileUtilsTest, MAYBE_ConvertByteArrayToDouble) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000108 double value = 0.0;
109
110 EXPECT_EQ(0, ConvertByteArrayToDouble(kPiBytes, &value));
111 EXPECT_DOUBLE_EQ(kPi, value);
112
113 EXPECT_EQ(0, ConvertByteArrayToDouble(kEBytes, &value));
114 EXPECT_DOUBLE_EQ(kE, value);
115
116 EXPECT_EQ(0, ConvertByteArrayToDouble(kAvogadroBytes, &value));
117 EXPECT_DOUBLE_EQ(kAvogadro, value);
118}
119
Peter Boströme2976c82016-01-04 22:44:05 +0100120#if defined(WEBRTC_IOS)
121#define MAYBE_ConvertFloatToByteArray DISABLED_ConvertFloatToByteArray
122#else
123#define MAYBE_ConvertFloatToByteArray ConvertFloatToByteArray
124#endif
125TEST_F(TransientFileUtilsTest, MAYBE_ConvertFloatToByteArray) {
kwiberg85d8bb02016-02-16 20:39:36 -0800126 std::unique_ptr<uint8_t[]> bytes(new uint8_t[4]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000127
128 EXPECT_EQ(0, ConvertFloatToByteArray(kPi, bytes.get()));
129 EXPECT_EQ(0, memcmp(bytes.get(), kPiBytesf, 4));
130
131 EXPECT_EQ(0, ConvertFloatToByteArray(kE, bytes.get()));
132 EXPECT_EQ(0, memcmp(bytes.get(), kEBytesf, 4));
133
134 EXPECT_EQ(0, ConvertFloatToByteArray(kAvogadro, bytes.get()));
135 EXPECT_EQ(0, memcmp(bytes.get(), kAvogadroBytesf, 4));
136}
137
Peter Boströme2976c82016-01-04 22:44:05 +0100138#if defined(WEBRTC_IOS)
139#define MAYBE_ConvertDoubleToByteArray DISABLED_ConvertDoubleToByteArray
140#else
141#define MAYBE_ConvertDoubleToByteArray ConvertDoubleToByteArray
142#endif
143TEST_F(TransientFileUtilsTest, MAYBE_ConvertDoubleToByteArray) {
kwiberg85d8bb02016-02-16 20:39:36 -0800144 std::unique_ptr<uint8_t[]> bytes(new uint8_t[8]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000145
146 EXPECT_EQ(0, ConvertDoubleToByteArray(kPi, bytes.get()));
147 EXPECT_EQ(0, memcmp(bytes.get(), kPiBytes, 8));
148
149 EXPECT_EQ(0, ConvertDoubleToByteArray(kE, bytes.get()));
150 EXPECT_EQ(0, memcmp(bytes.get(), kEBytes, 8));
151
152 EXPECT_EQ(0, ConvertDoubleToByteArray(kAvogadro, bytes.get()));
153 EXPECT_EQ(0, memcmp(bytes.get(), kAvogadroBytes, 8));
154}
155
Peter Boströme2976c82016-01-04 22:44:05 +0100156#if defined(WEBRTC_IOS)
157#define MAYBE_ReadInt16BufferFromFile DISABLED_ReadInt16BufferFromFile
158#else
159#define MAYBE_ReadInt16BufferFromFile ReadInt16BufferFromFile
160#endif
161TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16BufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000162 std::string test_filename = kTestFileName;
163
kwiberg85d8bb02016-02-16 20:39:36 -0800164 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000165
tommia6219cc2016-06-15 10:30:14 -0700166 file->OpenFile(test_filename.c_str(), true); // Read only.
167 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
168 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000169
170 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800171 std::unique_ptr<int16_t[]> buffer(new int16_t[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000172
173 EXPECT_EQ(kBufferLength, ReadInt16BufferFromFile(file.get(),
174 kBufferLength,
175 buffer.get()));
176 EXPECT_EQ(22377, buffer[4]);
177 EXPECT_EQ(16389, buffer[7]);
178 EXPECT_EQ(17631, buffer[kBufferLength - 1]);
179
180 file->Rewind();
181
182 // The next test is for checking the case where there are not as much data as
183 // needed in the file, but reads to the end, and it returns the number of
184 // int16s read.
185 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
186 buffer.reset(new int16_t[kBufferLenghtLargerThanFile]);
187 EXPECT_EQ(kBufferLength, ReadInt16BufferFromFile(file.get(),
188 kBufferLenghtLargerThanFile,
189 buffer.get()));
190 EXPECT_EQ(11544, buffer[0]);
191 EXPECT_EQ(22377, buffer[4]);
192 EXPECT_EQ(16389, buffer[7]);
193 EXPECT_EQ(17631, buffer[kBufferLength - 1]);
194}
195
Peter Boströme2976c82016-01-04 22:44:05 +0100196#if defined(WEBRTC_IOS)
197#define MAYBE_ReadInt16FromFileToFloatBuffer \
198 DISABLED_ReadInt16FromFileToFloatBuffer
199#else
200#define MAYBE_ReadInt16FromFileToFloatBuffer ReadInt16FromFileToFloatBuffer
201#endif
202TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16FromFileToFloatBuffer) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000203 std::string test_filename = kTestFileName;
204
kwiberg85d8bb02016-02-16 20:39:36 -0800205 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000206
tommia6219cc2016-06-15 10:30:14 -0700207 file->OpenFile(test_filename.c_str(), true); // Read only.
208 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
209 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000210
211 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800212 std::unique_ptr<float[]> buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000213
214 EXPECT_EQ(kBufferLength, ReadInt16FromFileToFloatBuffer(file.get(),
215 kBufferLength,
216 buffer.get()));
217
218 EXPECT_DOUBLE_EQ(11544, buffer[0]);
219 EXPECT_DOUBLE_EQ(22377, buffer[4]);
220 EXPECT_DOUBLE_EQ(16389, buffer[7]);
221 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
222
223 file->Rewind();
224
225 // The next test is for checking the case where there are not as much data as
226 // needed in the file, but reads to the end, and it returns the number of
227 // int16s read.
228 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
229 buffer.reset(new float[kBufferLenghtLargerThanFile]);
230 EXPECT_EQ(kBufferLength,
231 ReadInt16FromFileToFloatBuffer(file.get(),
232 kBufferLenghtLargerThanFile,
233 buffer.get()));
234 EXPECT_DOUBLE_EQ(11544, buffer[0]);
235 EXPECT_DOUBLE_EQ(22377, buffer[4]);
236 EXPECT_DOUBLE_EQ(16389, buffer[7]);
237 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
238}
239
Peter Boströme2976c82016-01-04 22:44:05 +0100240#if defined(WEBRTC_IOS)
241#define MAYBE_ReadInt16FromFileToDoubleBuffer \
242 DISABLED_ReadInt16FromFileToDoubleBuffer
243#else
244#define MAYBE_ReadInt16FromFileToDoubleBuffer ReadInt16FromFileToDoubleBuffer
245#endif
246TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16FromFileToDoubleBuffer) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000247 std::string test_filename = kTestFileName;
248
kwiberg85d8bb02016-02-16 20:39:36 -0800249 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000250
tommia6219cc2016-06-15 10:30:14 -0700251 file->OpenFile(test_filename.c_str(), true); // Read only.
252 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
253 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000254
255 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800256 std::unique_ptr<double[]> buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000257
258 EXPECT_EQ(kBufferLength, ReadInt16FromFileToDoubleBuffer(file.get(),
259 kBufferLength,
260 buffer.get()));
261 EXPECT_DOUBLE_EQ(11544, buffer[0]);
262 EXPECT_DOUBLE_EQ(22377, buffer[4]);
263 EXPECT_DOUBLE_EQ(16389, buffer[7]);
264 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
265
266 file->Rewind();
267
268 // The next test is for checking the case where there are not as much data as
269 // needed in the file, but reads to the end, and it returns the number of
270 // int16s read.
271 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
272 buffer.reset(new double[kBufferLenghtLargerThanFile]);
273 EXPECT_EQ(kBufferLength,
274 ReadInt16FromFileToDoubleBuffer(file.get(),
275 kBufferLenghtLargerThanFile,
276 buffer.get()));
277 EXPECT_DOUBLE_EQ(11544, buffer[0]);
278 EXPECT_DOUBLE_EQ(22377, buffer[4]);
279 EXPECT_DOUBLE_EQ(16389, buffer[7]);
280 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
281}
282
Peter Boströme2976c82016-01-04 22:44:05 +0100283#if defined(WEBRTC_IOS)
284#define MAYBE_ReadFloatBufferFromFile DISABLED_ReadFloatBufferFromFile
285#else
286#define MAYBE_ReadFloatBufferFromFile ReadFloatBufferFromFile
287#endif
288TEST_F(TransientFileUtilsTest, MAYBE_ReadFloatBufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000289 std::string test_filename = kTestFileNamef;
290
kwiberg85d8bb02016-02-16 20:39:36 -0800291 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000292
tommia6219cc2016-06-15 10:30:14 -0700293 file->OpenFile(test_filename.c_str(), true); // Read only.
294 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
295 << kTestFileNamef.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000296
297 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800298 std::unique_ptr<float[]> buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000299
300 EXPECT_EQ(kBufferLength, ReadFloatBufferFromFile(file.get(),
301 kBufferLength,
302 buffer.get()));
303 EXPECT_FLOAT_EQ(kPi, buffer[0]);
304 EXPECT_FLOAT_EQ(kE, buffer[1]);
305 EXPECT_FLOAT_EQ(kAvogadro, buffer[2]);
306
307 file->Rewind();
308
309 // The next test is for checking the case where there are not as much data as
310 // needed in the file, but reads to the end, and it returns the number of
311 // doubles read.
312 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
313 buffer.reset(new float[kBufferLenghtLargerThanFile]);
314 EXPECT_EQ(kBufferLength, ReadFloatBufferFromFile(file.get(),
315 kBufferLenghtLargerThanFile,
316 buffer.get()));
317 EXPECT_FLOAT_EQ(kPi, buffer[0]);
318 EXPECT_FLOAT_EQ(kE, buffer[1]);
319 EXPECT_FLOAT_EQ(kAvogadro, buffer[2]);
320}
321
Peter Boströme2976c82016-01-04 22:44:05 +0100322#if defined(WEBRTC_IOS)
323#define MAYBE_ReadDoubleBufferFromFile DISABLED_ReadDoubleBufferFromFile
324#else
325#define MAYBE_ReadDoubleBufferFromFile ReadDoubleBufferFromFile
326#endif
327TEST_F(TransientFileUtilsTest, MAYBE_ReadDoubleBufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000328 std::string test_filename = kTestFileName;
329
kwiberg85d8bb02016-02-16 20:39:36 -0800330 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000331
tommia6219cc2016-06-15 10:30:14 -0700332 file->OpenFile(test_filename.c_str(), true); // Read only.
333 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
334 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000335
336 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800337 std::unique_ptr<double[]> buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000338
339 EXPECT_EQ(kBufferLength, ReadDoubleBufferFromFile(file.get(),
340 kBufferLength,
341 buffer.get()));
342 EXPECT_DOUBLE_EQ(kPi, buffer[0]);
343 EXPECT_DOUBLE_EQ(kE, buffer[1]);
344 EXPECT_DOUBLE_EQ(kAvogadro, buffer[2]);
345
346 file->Rewind();
347
348 // The next test is for checking the case where there are not as much data as
349 // needed in the file, but reads to the end, and it returns the number of
350 // doubles read.
351 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
352 buffer.reset(new double[kBufferLenghtLargerThanFile]);
353 EXPECT_EQ(kBufferLength, ReadDoubleBufferFromFile(file.get(),
354 kBufferLenghtLargerThanFile,
355 buffer.get()));
356 EXPECT_DOUBLE_EQ(kPi, buffer[0]);
357 EXPECT_DOUBLE_EQ(kE, buffer[1]);
358 EXPECT_DOUBLE_EQ(kAvogadro, buffer[2]);
359}
360
Peter Boströme2976c82016-01-04 22:44:05 +0100361#if defined(WEBRTC_IOS)
362#define MAYBE_WriteInt16BufferToFile DISABLED_WriteInt16BufferToFile
363#else
364#define MAYBE_WriteInt16BufferToFile WriteInt16BufferToFile
365#endif
366TEST_F(TransientFileUtilsTest, MAYBE_WriteInt16BufferToFile) {
kwiberg85d8bb02016-02-16 20:39:36 -0800367 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000368
jbauch541f1862016-02-10 09:09:54 -0800369 std::string kOutFileName = CreateTempFilename(test::OutputPath(),
aluebs@webrtc.orge5a921a2015-01-05 18:45:22 +0000370 "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000371
tommia6219cc2016-06-15 10:30:14 -0700372 file->OpenFile(kOutFileName.c_str(), false); // Write mode.
373 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
374 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000375
376 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800377 std::unique_ptr<int16_t[]> written_buffer(new int16_t[kBufferLength]);
378 std::unique_ptr<int16_t[]> read_buffer(new int16_t[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000379
380 written_buffer[0] = 1;
381 written_buffer[1] = 2;
382 written_buffer[2] = 3;
383
384 EXPECT_EQ(kBufferLength, WriteInt16BufferToFile(file.get(),
385 kBufferLength,
386 written_buffer.get()));
387
388 file->CloseFile();
389
tommia6219cc2016-06-15 10:30:14 -0700390 file->OpenFile(kOutFileName.c_str(), true); // Read only.
391 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
392 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000393
394 EXPECT_EQ(kBufferLength, ReadInt16BufferFromFile(file.get(),
395 kBufferLength,
396 read_buffer.get()));
397 EXPECT_EQ(0, memcmp(written_buffer.get(),
398 read_buffer.get(),
399 kBufferLength * sizeof(written_buffer[0])));
400}
401
Peter Boströme2976c82016-01-04 22:44:05 +0100402#if defined(WEBRTC_IOS)
403#define MAYBE_WriteFloatBufferToFile DISABLED_WriteFloatBufferToFile
404#else
405#define MAYBE_WriteFloatBufferToFile WriteFloatBufferToFile
406#endif
407TEST_F(TransientFileUtilsTest, MAYBE_WriteFloatBufferToFile) {
kwiberg85d8bb02016-02-16 20:39:36 -0800408 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000409
jbauch541f1862016-02-10 09:09:54 -0800410 std::string kOutFileName = CreateTempFilename(test::OutputPath(),
aluebs@webrtc.orge5a921a2015-01-05 18:45:22 +0000411 "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000412
tommia6219cc2016-06-15 10:30:14 -0700413 file->OpenFile(kOutFileName.c_str(), false); // Write mode.
414 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
415 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000416
417 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800418 std::unique_ptr<float[]> written_buffer(new float[kBufferLength]);
419 std::unique_ptr<float[]> read_buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000420
conceptgenesis3f705622016-01-30 14:40:44 -0800421 written_buffer[0] = static_cast<float>(kPi);
422 written_buffer[1] = static_cast<float>(kE);
423 written_buffer[2] = static_cast<float>(kAvogadro);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000424
425 EXPECT_EQ(kBufferLength, WriteFloatBufferToFile(file.get(),
426 kBufferLength,
427 written_buffer.get()));
428
429 file->CloseFile();
430
tommia6219cc2016-06-15 10:30:14 -0700431 file->OpenFile(kOutFileName.c_str(), true); // Read only.
432 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
433 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000434
435 EXPECT_EQ(kBufferLength, ReadFloatBufferFromFile(file.get(),
436 kBufferLength,
437 read_buffer.get()));
438 EXPECT_EQ(0, memcmp(written_buffer.get(),
439 read_buffer.get(),
440 kBufferLength * sizeof(written_buffer[0])));
441}
442
Peter Boströme2976c82016-01-04 22:44:05 +0100443#if defined(WEBRTC_IOS)
444#define MAYBE_WriteDoubleBufferToFile DISABLED_WriteDoubleBufferToFile
445#else
446#define MAYBE_WriteDoubleBufferToFile WriteDoubleBufferToFile
447#endif
448TEST_F(TransientFileUtilsTest, MAYBE_WriteDoubleBufferToFile) {
kwiberg85d8bb02016-02-16 20:39:36 -0800449 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000450
jbauch541f1862016-02-10 09:09:54 -0800451 std::string kOutFileName = CreateTempFilename(test::OutputPath(),
aluebs@webrtc.orge5a921a2015-01-05 18:45:22 +0000452 "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000453
tommia6219cc2016-06-15 10:30:14 -0700454 file->OpenFile(kOutFileName.c_str(), false); // Write mode.
455 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
456 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000457
458 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800459 std::unique_ptr<double[]> written_buffer(new double[kBufferLength]);
460 std::unique_ptr<double[]> read_buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000461
462 written_buffer[0] = kPi;
463 written_buffer[1] = kE;
464 written_buffer[2] = kAvogadro;
465
466 EXPECT_EQ(kBufferLength, WriteDoubleBufferToFile(file.get(),
467 kBufferLength,
468 written_buffer.get()));
469
470 file->CloseFile();
471
tommia6219cc2016-06-15 10:30:14 -0700472 file->OpenFile(kOutFileName.c_str(), true); // Read only.
473 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
474 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000475
476 EXPECT_EQ(kBufferLength, ReadDoubleBufferFromFile(file.get(),
477 kBufferLength,
478 read_buffer.get()));
479 EXPECT_EQ(0, memcmp(written_buffer.get(),
480 read_buffer.get(),
481 kBufferLength * sizeof(written_buffer[0])));
482}
483
Peter Boströme2976c82016-01-04 22:44:05 +0100484#if defined(WEBRTC_IOS)
485#define MAYBE_ExpectedErrorReturnValues DISABLED_ExpectedErrorReturnValues
486#else
487#define MAYBE_ExpectedErrorReturnValues ExpectedErrorReturnValues
488#endif
489TEST_F(TransientFileUtilsTest, MAYBE_ExpectedErrorReturnValues) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000490 std::string test_filename = kTestFileName;
491
492 double value;
kwiberg85d8bb02016-02-16 20:39:36 -0800493 std::unique_ptr<int16_t[]> int16_buffer(new int16_t[1]);
494 std::unique_ptr<double[]> double_buffer(new double[1]);
495 std::unique_ptr<FileWrapper> file(FileWrapper::Create());
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000496
497 EXPECT_EQ(-1, ConvertByteArrayToDouble(NULL, &value));
498 EXPECT_EQ(-1, ConvertByteArrayToDouble(kPiBytes, NULL));
499
500 EXPECT_EQ(-1, ConvertDoubleToByteArray(kPi, NULL));
501
502 // Tests with file not opened.
503 EXPECT_EQ(0u, ReadInt16BufferFromFile(file.get(), 1, int16_buffer.get()));
504 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(file.get(),
505 1,
506 double_buffer.get()));
507 EXPECT_EQ(0u, ReadDoubleBufferFromFile(file.get(), 1, double_buffer.get()));
508 EXPECT_EQ(0u, WriteInt16BufferToFile(file.get(), 1, int16_buffer.get()));
509 EXPECT_EQ(0u, WriteDoubleBufferToFile(file.get(), 1, double_buffer.get()));
510
tommia6219cc2016-06-15 10:30:14 -0700511 file->OpenFile(test_filename.c_str(), true); // Read only.
512 ASSERT_TRUE(file->is_open()) << "File could not be opened:\n"
513 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000514
515 EXPECT_EQ(0u, ReadInt16BufferFromFile(NULL, 1, int16_buffer.get()));
516 EXPECT_EQ(0u, ReadInt16BufferFromFile(file.get(), 1, NULL));
517 EXPECT_EQ(0u, ReadInt16BufferFromFile(file.get(), 0, int16_buffer.get()));
518
519 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(NULL, 1, double_buffer.get()));
520 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(file.get(), 1, NULL));
521 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(file.get(),
522 0,
523 double_buffer.get()));
524
525 EXPECT_EQ(0u, ReadDoubleBufferFromFile(NULL, 1, double_buffer.get()));
526 EXPECT_EQ(0u, ReadDoubleBufferFromFile(file.get(), 1, NULL));
527 EXPECT_EQ(0u, ReadDoubleBufferFromFile(file.get(), 0, double_buffer.get()));
528
529 EXPECT_EQ(0u, WriteInt16BufferToFile(NULL, 1, int16_buffer.get()));
530 EXPECT_EQ(0u, WriteInt16BufferToFile(file.get(), 1, NULL));
531 EXPECT_EQ(0u, WriteInt16BufferToFile(file.get(), 0, int16_buffer.get()));
532
533 EXPECT_EQ(0u, WriteDoubleBufferToFile(NULL, 1, double_buffer.get()));
534 EXPECT_EQ(0u, WriteDoubleBufferToFile(file.get(), 1, NULL));
535 EXPECT_EQ(0u, WriteDoubleBufferToFile(file.get(), 0, double_buffer.get()));
536}
537
538} // namespace webrtc
539