blob: 0bded020b1b8faf3a00394238ef4fbc2ca145a7b [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
Niels Möller5a6ae022019-01-21 11:59:10 +0100161 FileWrapper file = FileWrapper::OpenReadOnly(test_filename.c_str());
162 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
163 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000164
165 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800166 std::unique_ptr<int16_t[]> buffer(new int16_t[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000167
Yves Gerey665174f2018-06-19 15:03:05 +0200168 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100169 ReadInt16BufferFromFile(&file, kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000170 EXPECT_EQ(22377, buffer[4]);
171 EXPECT_EQ(16389, buffer[7]);
172 EXPECT_EQ(17631, buffer[kBufferLength - 1]);
173
Niels Möller5a6ae022019-01-21 11:59:10 +0100174 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000175
176 // The next test is for checking the case where there are not as much data as
177 // needed in the file, but reads to the end, and it returns the number of
178 // int16s read.
179 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
180 buffer.reset(new int16_t[kBufferLenghtLargerThanFile]);
Yves Gerey665174f2018-06-19 15:03:05 +0200181 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100182 ReadInt16BufferFromFile(&file, kBufferLenghtLargerThanFile,
Yves Gerey665174f2018-06-19 15:03:05 +0200183 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000184 EXPECT_EQ(11544, buffer[0]);
185 EXPECT_EQ(22377, buffer[4]);
186 EXPECT_EQ(16389, buffer[7]);
187 EXPECT_EQ(17631, buffer[kBufferLength - 1]);
188}
189
Peter Boströme2976c82016-01-04 22:44:05 +0100190#if defined(WEBRTC_IOS)
191#define MAYBE_ReadInt16FromFileToFloatBuffer \
192 DISABLED_ReadInt16FromFileToFloatBuffer
193#else
194#define MAYBE_ReadInt16FromFileToFloatBuffer ReadInt16FromFileToFloatBuffer
195#endif
196TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16FromFileToFloatBuffer) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000197 std::string test_filename = kTestFileName;
198
Niels Möller5a6ae022019-01-21 11:59:10 +0100199 FileWrapper file = FileWrapper::OpenReadOnly(test_filename.c_str());
200 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
201 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000202
203 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800204 std::unique_ptr<float[]> buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000205
Niels Möller5a6ae022019-01-21 11:59:10 +0100206 EXPECT_EQ(kBufferLength,
207 ReadInt16FromFileToFloatBuffer(&file, kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000208
209 EXPECT_DOUBLE_EQ(11544, buffer[0]);
210 EXPECT_DOUBLE_EQ(22377, buffer[4]);
211 EXPECT_DOUBLE_EQ(16389, buffer[7]);
212 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
213
Niels Möller5a6ae022019-01-21 11:59:10 +0100214 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000215
216 // The next test is for checking the case where there are not as much data as
217 // needed in the file, but reads to the end, and it returns the number of
218 // int16s read.
219 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
220 buffer.reset(new float[kBufferLenghtLargerThanFile]);
221 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100222 ReadInt16FromFileToFloatBuffer(&file, kBufferLenghtLargerThanFile,
223 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000224 EXPECT_DOUBLE_EQ(11544, buffer[0]);
225 EXPECT_DOUBLE_EQ(22377, buffer[4]);
226 EXPECT_DOUBLE_EQ(16389, buffer[7]);
227 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
228}
229
Peter Boströme2976c82016-01-04 22:44:05 +0100230#if defined(WEBRTC_IOS)
231#define MAYBE_ReadInt16FromFileToDoubleBuffer \
232 DISABLED_ReadInt16FromFileToDoubleBuffer
233#else
234#define MAYBE_ReadInt16FromFileToDoubleBuffer ReadInt16FromFileToDoubleBuffer
235#endif
236TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16FromFileToDoubleBuffer) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000237 std::string test_filename = kTestFileName;
238
Niels Möller5a6ae022019-01-21 11:59:10 +0100239 FileWrapper file = FileWrapper::OpenReadOnly(test_filename.c_str());
240 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
241 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000242
243 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800244 std::unique_ptr<double[]> buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000245
Niels Möller5a6ae022019-01-21 11:59:10 +0100246 EXPECT_EQ(kBufferLength, ReadInt16FromFileToDoubleBuffer(&file, kBufferLength,
247 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000248 EXPECT_DOUBLE_EQ(11544, buffer[0]);
249 EXPECT_DOUBLE_EQ(22377, buffer[4]);
250 EXPECT_DOUBLE_EQ(16389, buffer[7]);
251 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
252
Niels Möller5a6ae022019-01-21 11:59:10 +0100253 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000254
255 // The next test is for checking the case where there are not as much data as
256 // needed in the file, but reads to the end, and it returns the number of
257 // int16s read.
258 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
259 buffer.reset(new double[kBufferLenghtLargerThanFile]);
260 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100261 ReadInt16FromFileToDoubleBuffer(&file, kBufferLenghtLargerThanFile,
262 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000263 EXPECT_DOUBLE_EQ(11544, buffer[0]);
264 EXPECT_DOUBLE_EQ(22377, buffer[4]);
265 EXPECT_DOUBLE_EQ(16389, buffer[7]);
266 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
267}
268
Peter Boströme2976c82016-01-04 22:44:05 +0100269#if defined(WEBRTC_IOS)
270#define MAYBE_ReadFloatBufferFromFile DISABLED_ReadFloatBufferFromFile
271#else
272#define MAYBE_ReadFloatBufferFromFile ReadFloatBufferFromFile
273#endif
274TEST_F(TransientFileUtilsTest, MAYBE_ReadFloatBufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000275 std::string test_filename = kTestFileNamef;
276
Niels Möller5a6ae022019-01-21 11:59:10 +0100277 FileWrapper file = FileWrapper::OpenReadOnly(test_filename.c_str());
278 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
279 << kTestFileNamef.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000280
281 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800282 std::unique_ptr<float[]> buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000283
Yves Gerey665174f2018-06-19 15:03:05 +0200284 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100285 ReadFloatBufferFromFile(&file, kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000286 EXPECT_FLOAT_EQ(kPi, buffer[0]);
287 EXPECT_FLOAT_EQ(kE, buffer[1]);
288 EXPECT_FLOAT_EQ(kAvogadro, buffer[2]);
289
Niels Möller5a6ae022019-01-21 11:59:10 +0100290 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000291
292 // The next test is for checking the case where there are not as much data as
293 // needed in the file, but reads to the end, and it returns the number of
294 // doubles read.
295 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
296 buffer.reset(new float[kBufferLenghtLargerThanFile]);
Yves Gerey665174f2018-06-19 15:03:05 +0200297 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100298 ReadFloatBufferFromFile(&file, kBufferLenghtLargerThanFile,
Yves Gerey665174f2018-06-19 15:03:05 +0200299 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000300 EXPECT_FLOAT_EQ(kPi, buffer[0]);
301 EXPECT_FLOAT_EQ(kE, buffer[1]);
302 EXPECT_FLOAT_EQ(kAvogadro, buffer[2]);
303}
304
Peter Boströme2976c82016-01-04 22:44:05 +0100305#if defined(WEBRTC_IOS)
306#define MAYBE_ReadDoubleBufferFromFile DISABLED_ReadDoubleBufferFromFile
307#else
308#define MAYBE_ReadDoubleBufferFromFile ReadDoubleBufferFromFile
309#endif
310TEST_F(TransientFileUtilsTest, MAYBE_ReadDoubleBufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000311 std::string test_filename = kTestFileName;
312
Niels Möller5a6ae022019-01-21 11:59:10 +0100313 FileWrapper file = FileWrapper::OpenReadOnly(test_filename.c_str());
314 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
315 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000316
317 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800318 std::unique_ptr<double[]> buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000319
Yves Gerey665174f2018-06-19 15:03:05 +0200320 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100321 ReadDoubleBufferFromFile(&file, kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000322 EXPECT_DOUBLE_EQ(kPi, buffer[0]);
323 EXPECT_DOUBLE_EQ(kE, buffer[1]);
324 EXPECT_DOUBLE_EQ(kAvogadro, buffer[2]);
325
Niels Möller5a6ae022019-01-21 11:59:10 +0100326 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000327
328 // The next test is for checking the case where there are not as much data as
329 // needed in the file, but reads to the end, and it returns the number of
330 // doubles read.
331 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
332 buffer.reset(new double[kBufferLenghtLargerThanFile]);
Yves Gerey665174f2018-06-19 15:03:05 +0200333 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100334 ReadDoubleBufferFromFile(&file, kBufferLenghtLargerThanFile,
Yves Gerey665174f2018-06-19 15:03:05 +0200335 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000336 EXPECT_DOUBLE_EQ(kPi, buffer[0]);
337 EXPECT_DOUBLE_EQ(kE, buffer[1]);
338 EXPECT_DOUBLE_EQ(kAvogadro, buffer[2]);
339}
340
Peter Boströme2976c82016-01-04 22:44:05 +0100341#if defined(WEBRTC_IOS)
342#define MAYBE_WriteInt16BufferToFile DISABLED_WriteInt16BufferToFile
343#else
344#define MAYBE_WriteInt16BufferToFile WriteInt16BufferToFile
345#endif
346TEST_F(TransientFileUtilsTest, MAYBE_WriteInt16BufferToFile) {
Yves Gerey665174f2018-06-19 15:03:05 +0200347 std::string kOutFileName =
348 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000349
Niels Möller5a6ae022019-01-21 11:59:10 +0100350 FileWrapper file = FileWrapper::OpenWriteOnly(kOutFileName.c_str());
351 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
352 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000353
354 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800355 std::unique_ptr<int16_t[]> written_buffer(new int16_t[kBufferLength]);
356 std::unique_ptr<int16_t[]> read_buffer(new int16_t[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000357
358 written_buffer[0] = 1;
359 written_buffer[1] = 2;
360 written_buffer[2] = 3;
361
Niels Möller5a6ae022019-01-21 11:59:10 +0100362 EXPECT_EQ(kBufferLength,
363 WriteInt16BufferToFile(&file, kBufferLength, written_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000364
Niels Möller5a6ae022019-01-21 11:59:10 +0100365 file.Close();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000366
Niels Möller5a6ae022019-01-21 11:59:10 +0100367 file = FileWrapper::OpenReadOnly(kOutFileName.c_str());
368 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
369 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000370
Niels Möller5a6ae022019-01-21 11:59:10 +0100371 EXPECT_EQ(kBufferLength,
372 ReadInt16BufferFromFile(&file, kBufferLength, read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200373 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000374 kBufferLength * sizeof(written_buffer[0])));
375}
376
Peter Boströme2976c82016-01-04 22:44:05 +0100377#if defined(WEBRTC_IOS)
378#define MAYBE_WriteFloatBufferToFile DISABLED_WriteFloatBufferToFile
379#else
380#define MAYBE_WriteFloatBufferToFile WriteFloatBufferToFile
381#endif
382TEST_F(TransientFileUtilsTest, MAYBE_WriteFloatBufferToFile) {
Yves Gerey665174f2018-06-19 15:03:05 +0200383 std::string kOutFileName =
384 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000385
Niels Möller5a6ae022019-01-21 11:59:10 +0100386 FileWrapper file = FileWrapper::OpenWriteOnly(kOutFileName.c_str());
387 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
388 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000389
390 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800391 std::unique_ptr<float[]> written_buffer(new float[kBufferLength]);
392 std::unique_ptr<float[]> read_buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000393
conceptgenesis3f705622016-01-30 14:40:44 -0800394 written_buffer[0] = static_cast<float>(kPi);
395 written_buffer[1] = static_cast<float>(kE);
396 written_buffer[2] = static_cast<float>(kAvogadro);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000397
Niels Möller5a6ae022019-01-21 11:59:10 +0100398 EXPECT_EQ(kBufferLength,
399 WriteFloatBufferToFile(&file, kBufferLength, written_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000400
Niels Möller5a6ae022019-01-21 11:59:10 +0100401 file.Close();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000402
Niels Möller5a6ae022019-01-21 11:59:10 +0100403 file = FileWrapper::OpenReadOnly(kOutFileName.c_str());
404 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
405 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000406
Niels Möller5a6ae022019-01-21 11:59:10 +0100407 EXPECT_EQ(kBufferLength,
408 ReadFloatBufferFromFile(&file, kBufferLength, read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200409 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000410 kBufferLength * sizeof(written_buffer[0])));
411}
412
Peter Boströme2976c82016-01-04 22:44:05 +0100413#if defined(WEBRTC_IOS)
414#define MAYBE_WriteDoubleBufferToFile DISABLED_WriteDoubleBufferToFile
415#else
416#define MAYBE_WriteDoubleBufferToFile WriteDoubleBufferToFile
417#endif
418TEST_F(TransientFileUtilsTest, MAYBE_WriteDoubleBufferToFile) {
Yves Gerey665174f2018-06-19 15:03:05 +0200419 std::string kOutFileName =
420 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000421
Niels Möller5a6ae022019-01-21 11:59:10 +0100422 FileWrapper file = FileWrapper::OpenWriteOnly(kOutFileName.c_str());
423 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
424 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000425
426 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800427 std::unique_ptr<double[]> written_buffer(new double[kBufferLength]);
428 std::unique_ptr<double[]> read_buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000429
430 written_buffer[0] = kPi;
431 written_buffer[1] = kE;
432 written_buffer[2] = kAvogadro;
433
Niels Möller5a6ae022019-01-21 11:59:10 +0100434 EXPECT_EQ(kBufferLength, WriteDoubleBufferToFile(&file, kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000435 written_buffer.get()));
436
Niels Möller5a6ae022019-01-21 11:59:10 +0100437 file.Close();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000438
Niels Möller5a6ae022019-01-21 11:59:10 +0100439 file = FileWrapper::OpenReadOnly(kOutFileName.c_str());
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
Niels Möller5a6ae022019-01-21 11:59:10 +0100443 EXPECT_EQ(kBufferLength,
444 ReadDoubleBufferFromFile(&file, kBufferLength, read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200445 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000446 kBufferLength * sizeof(written_buffer[0])));
447}
448
Peter Boströme2976c82016-01-04 22:44:05 +0100449#if defined(WEBRTC_IOS)
450#define MAYBE_ExpectedErrorReturnValues DISABLED_ExpectedErrorReturnValues
451#else
452#define MAYBE_ExpectedErrorReturnValues ExpectedErrorReturnValues
453#endif
454TEST_F(TransientFileUtilsTest, MAYBE_ExpectedErrorReturnValues) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000455 std::string test_filename = kTestFileName;
456
457 double value;
kwiberg85d8bb02016-02-16 20:39:36 -0800458 std::unique_ptr<int16_t[]> int16_buffer(new int16_t[1]);
459 std::unique_ptr<double[]> double_buffer(new double[1]);
Niels Möller5a6ae022019-01-21 11:59:10 +0100460 FileWrapper file;
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000461
462 EXPECT_EQ(-1, ConvertByteArrayToDouble(NULL, &value));
463 EXPECT_EQ(-1, ConvertByteArrayToDouble(kPiBytes, NULL));
464
465 EXPECT_EQ(-1, ConvertDoubleToByteArray(kPi, NULL));
466
467 // Tests with file not opened.
Niels Möller5a6ae022019-01-21 11:59:10 +0100468 EXPECT_EQ(0u, ReadInt16BufferFromFile(&file, 1, int16_buffer.get()));
469 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(&file, 1, double_buffer.get()));
470 EXPECT_EQ(0u, ReadDoubleBufferFromFile(&file, 1, double_buffer.get()));
471 EXPECT_EQ(0u, WriteInt16BufferToFile(&file, 1, int16_buffer.get()));
472 EXPECT_EQ(0u, WriteDoubleBufferToFile(&file, 1, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000473
Niels Möller5a6ae022019-01-21 11:59:10 +0100474 file = FileWrapper::OpenReadOnly(test_filename.c_str());
475 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
476 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000477
478 EXPECT_EQ(0u, ReadInt16BufferFromFile(NULL, 1, int16_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100479 EXPECT_EQ(0u, ReadInt16BufferFromFile(&file, 1, NULL));
480 EXPECT_EQ(0u, ReadInt16BufferFromFile(&file, 0, int16_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000481
482 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(NULL, 1, double_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100483 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(&file, 1, NULL));
484 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(&file, 0, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000485
486 EXPECT_EQ(0u, ReadDoubleBufferFromFile(NULL, 1, double_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100487 EXPECT_EQ(0u, ReadDoubleBufferFromFile(&file, 1, NULL));
488 EXPECT_EQ(0u, ReadDoubleBufferFromFile(&file, 0, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000489
490 EXPECT_EQ(0u, WriteInt16BufferToFile(NULL, 1, int16_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100491 EXPECT_EQ(0u, WriteInt16BufferToFile(&file, 1, NULL));
492 EXPECT_EQ(0u, WriteInt16BufferToFile(&file, 0, int16_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000493
494 EXPECT_EQ(0u, WriteDoubleBufferToFile(NULL, 1, double_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100495 EXPECT_EQ(0u, WriteDoubleBufferToFile(&file, 1, NULL));
496 EXPECT_EQ(0u, WriteDoubleBufferToFile(&file, 0, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000497}
498
499} // namespace webrtc