blob: 1bcf6f95bebab93a255574b4b5aeae26e1f43cf0 [file] [log] [blame]
pbos@webrtc.org788acd12014-12-15 09:41:24 +00001/*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "modules/audio_processing/transient/file_utils.h"
pbos@webrtc.org788acd12014-12-15 09:41:24 +000012
13#include <string.h>
Jonas Olssona4d87372019-07-05 19:08:33 +020014
kwiberg85d8bb02016-02-16 20:39:36 -080015#include <memory>
Yves Gerey665174f2018-06-19 15:03:05 +020016#include <string>
jbauch541f1862016-02-10 09:09:54 -080017#include <vector>
pbos@webrtc.org788acd12014-12-15 09:41:24 +000018
Karl Wiberg6a4d4112018-03-23 10:39:34 +010019#include "rtc_base/system/file_wrapper.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020020#include "test/gtest.h"
Steve Anton10542f22019-01-11 09:11:00 -080021#include "test/testsupport/file_utils.h"
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
Niels Möller5a6ae022019-01-21 11:59:10 +0100162 FileWrapper file = FileWrapper::OpenReadOnly(test_filename.c_str());
163 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
164 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000165
166 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800167 std::unique_ptr<int16_t[]> buffer(new int16_t[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000168
Yves Gerey665174f2018-06-19 15:03:05 +0200169 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100170 ReadInt16BufferFromFile(&file, kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000171 EXPECT_EQ(22377, buffer[4]);
172 EXPECT_EQ(16389, buffer[7]);
173 EXPECT_EQ(17631, buffer[kBufferLength - 1]);
174
Niels Möller5a6ae022019-01-21 11:59:10 +0100175 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000176
177 // The next test is for checking the case where there are not as much data as
178 // needed in the file, but reads to the end, and it returns the number of
179 // int16s read.
180 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
181 buffer.reset(new int16_t[kBufferLenghtLargerThanFile]);
Yves Gerey665174f2018-06-19 15:03:05 +0200182 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100183 ReadInt16BufferFromFile(&file, kBufferLenghtLargerThanFile,
Yves Gerey665174f2018-06-19 15:03:05 +0200184 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000185 EXPECT_EQ(11544, buffer[0]);
186 EXPECT_EQ(22377, buffer[4]);
187 EXPECT_EQ(16389, buffer[7]);
188 EXPECT_EQ(17631, buffer[kBufferLength - 1]);
189}
190
Peter Boströme2976c82016-01-04 22:44:05 +0100191#if defined(WEBRTC_IOS)
192#define MAYBE_ReadInt16FromFileToFloatBuffer \
193 DISABLED_ReadInt16FromFileToFloatBuffer
194#else
195#define MAYBE_ReadInt16FromFileToFloatBuffer ReadInt16FromFileToFloatBuffer
196#endif
197TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16FromFileToFloatBuffer) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000198 std::string test_filename = kTestFileName;
199
Niels Möller5a6ae022019-01-21 11:59:10 +0100200 FileWrapper file = FileWrapper::OpenReadOnly(test_filename.c_str());
201 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
202 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000203
204 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800205 std::unique_ptr<float[]> buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000206
Niels Möller5a6ae022019-01-21 11:59:10 +0100207 EXPECT_EQ(kBufferLength,
208 ReadInt16FromFileToFloatBuffer(&file, kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000209
210 EXPECT_DOUBLE_EQ(11544, buffer[0]);
211 EXPECT_DOUBLE_EQ(22377, buffer[4]);
212 EXPECT_DOUBLE_EQ(16389, buffer[7]);
213 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
214
Niels Möller5a6ae022019-01-21 11:59:10 +0100215 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000216
217 // The next test is for checking the case where there are not as much data as
218 // needed in the file, but reads to the end, and it returns the number of
219 // int16s read.
220 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
221 buffer.reset(new float[kBufferLenghtLargerThanFile]);
222 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100223 ReadInt16FromFileToFloatBuffer(&file, kBufferLenghtLargerThanFile,
224 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000225 EXPECT_DOUBLE_EQ(11544, buffer[0]);
226 EXPECT_DOUBLE_EQ(22377, buffer[4]);
227 EXPECT_DOUBLE_EQ(16389, buffer[7]);
228 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
229}
230
Peter Boströme2976c82016-01-04 22:44:05 +0100231#if defined(WEBRTC_IOS)
232#define MAYBE_ReadInt16FromFileToDoubleBuffer \
233 DISABLED_ReadInt16FromFileToDoubleBuffer
234#else
235#define MAYBE_ReadInt16FromFileToDoubleBuffer ReadInt16FromFileToDoubleBuffer
236#endif
237TEST_F(TransientFileUtilsTest, MAYBE_ReadInt16FromFileToDoubleBuffer) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000238 std::string test_filename = kTestFileName;
239
Niels Möller5a6ae022019-01-21 11:59:10 +0100240 FileWrapper file = FileWrapper::OpenReadOnly(test_filename.c_str());
241 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
242 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000243
244 const size_t kBufferLength = 12;
kwiberg85d8bb02016-02-16 20:39:36 -0800245 std::unique_ptr<double[]> buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000246
Niels Möller5a6ae022019-01-21 11:59:10 +0100247 EXPECT_EQ(kBufferLength, ReadInt16FromFileToDoubleBuffer(&file, kBufferLength,
248 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000249 EXPECT_DOUBLE_EQ(11544, buffer[0]);
250 EXPECT_DOUBLE_EQ(22377, buffer[4]);
251 EXPECT_DOUBLE_EQ(16389, buffer[7]);
252 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
253
Niels Möller5a6ae022019-01-21 11:59:10 +0100254 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000255
256 // The next test is for checking the case where there are not as much data as
257 // needed in the file, but reads to the end, and it returns the number of
258 // int16s read.
259 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
260 buffer.reset(new double[kBufferLenghtLargerThanFile]);
261 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100262 ReadInt16FromFileToDoubleBuffer(&file, kBufferLenghtLargerThanFile,
263 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000264 EXPECT_DOUBLE_EQ(11544, buffer[0]);
265 EXPECT_DOUBLE_EQ(22377, buffer[4]);
266 EXPECT_DOUBLE_EQ(16389, buffer[7]);
267 EXPECT_DOUBLE_EQ(17631, buffer[kBufferLength - 1]);
268}
269
Peter Boströme2976c82016-01-04 22:44:05 +0100270#if defined(WEBRTC_IOS)
271#define MAYBE_ReadFloatBufferFromFile DISABLED_ReadFloatBufferFromFile
272#else
273#define MAYBE_ReadFloatBufferFromFile ReadFloatBufferFromFile
274#endif
275TEST_F(TransientFileUtilsTest, MAYBE_ReadFloatBufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000276 std::string test_filename = kTestFileNamef;
277
Niels Möller5a6ae022019-01-21 11:59:10 +0100278 FileWrapper file = FileWrapper::OpenReadOnly(test_filename.c_str());
279 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
280 << kTestFileNamef.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000281
282 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800283 std::unique_ptr<float[]> buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000284
Yves Gerey665174f2018-06-19 15:03:05 +0200285 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100286 ReadFloatBufferFromFile(&file, kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000287 EXPECT_FLOAT_EQ(kPi, buffer[0]);
288 EXPECT_FLOAT_EQ(kE, buffer[1]);
289 EXPECT_FLOAT_EQ(kAvogadro, buffer[2]);
290
Niels Möller5a6ae022019-01-21 11:59:10 +0100291 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000292
293 // The next test is for checking the case where there are not as much data as
294 // needed in the file, but reads to the end, and it returns the number of
295 // doubles read.
296 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
297 buffer.reset(new float[kBufferLenghtLargerThanFile]);
Yves Gerey665174f2018-06-19 15:03:05 +0200298 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100299 ReadFloatBufferFromFile(&file, kBufferLenghtLargerThanFile,
Yves Gerey665174f2018-06-19 15:03:05 +0200300 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000301 EXPECT_FLOAT_EQ(kPi, buffer[0]);
302 EXPECT_FLOAT_EQ(kE, buffer[1]);
303 EXPECT_FLOAT_EQ(kAvogadro, buffer[2]);
304}
305
Peter Boströme2976c82016-01-04 22:44:05 +0100306#if defined(WEBRTC_IOS)
307#define MAYBE_ReadDoubleBufferFromFile DISABLED_ReadDoubleBufferFromFile
308#else
309#define MAYBE_ReadDoubleBufferFromFile ReadDoubleBufferFromFile
310#endif
311TEST_F(TransientFileUtilsTest, MAYBE_ReadDoubleBufferFromFile) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000312 std::string test_filename = kTestFileName;
313
Niels Möller5a6ae022019-01-21 11:59:10 +0100314 FileWrapper file = FileWrapper::OpenReadOnly(test_filename.c_str());
315 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
316 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000317
318 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800319 std::unique_ptr<double[]> buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000320
Yves Gerey665174f2018-06-19 15:03:05 +0200321 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100322 ReadDoubleBufferFromFile(&file, kBufferLength, buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000323 EXPECT_DOUBLE_EQ(kPi, buffer[0]);
324 EXPECT_DOUBLE_EQ(kE, buffer[1]);
325 EXPECT_DOUBLE_EQ(kAvogadro, buffer[2]);
326
Niels Möller5a6ae022019-01-21 11:59:10 +0100327 file.Rewind();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000328
329 // The next test is for checking the case where there are not as much data as
330 // needed in the file, but reads to the end, and it returns the number of
331 // doubles read.
332 const size_t kBufferLenghtLargerThanFile = kBufferLength * 2;
333 buffer.reset(new double[kBufferLenghtLargerThanFile]);
Yves Gerey665174f2018-06-19 15:03:05 +0200334 EXPECT_EQ(kBufferLength,
Niels Möller5a6ae022019-01-21 11:59:10 +0100335 ReadDoubleBufferFromFile(&file, kBufferLenghtLargerThanFile,
Yves Gerey665174f2018-06-19 15:03:05 +0200336 buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000337 EXPECT_DOUBLE_EQ(kPi, buffer[0]);
338 EXPECT_DOUBLE_EQ(kE, buffer[1]);
339 EXPECT_DOUBLE_EQ(kAvogadro, buffer[2]);
340}
341
Peter Boströme2976c82016-01-04 22:44:05 +0100342#if defined(WEBRTC_IOS)
343#define MAYBE_WriteInt16BufferToFile DISABLED_WriteInt16BufferToFile
344#else
345#define MAYBE_WriteInt16BufferToFile WriteInt16BufferToFile
346#endif
347TEST_F(TransientFileUtilsTest, MAYBE_WriteInt16BufferToFile) {
Yves Gerey665174f2018-06-19 15:03:05 +0200348 std::string kOutFileName =
349 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000350
Niels Möller5a6ae022019-01-21 11:59:10 +0100351 FileWrapper file = FileWrapper::OpenWriteOnly(kOutFileName.c_str());
352 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
353 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000354
355 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800356 std::unique_ptr<int16_t[]> written_buffer(new int16_t[kBufferLength]);
357 std::unique_ptr<int16_t[]> read_buffer(new int16_t[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000358
359 written_buffer[0] = 1;
360 written_buffer[1] = 2;
361 written_buffer[2] = 3;
362
Niels Möller5a6ae022019-01-21 11:59:10 +0100363 EXPECT_EQ(kBufferLength,
364 WriteInt16BufferToFile(&file, kBufferLength, written_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000365
Niels Möller5a6ae022019-01-21 11:59:10 +0100366 file.Close();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000367
Niels Möller5a6ae022019-01-21 11:59:10 +0100368 file = FileWrapper::OpenReadOnly(kOutFileName.c_str());
369 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
370 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000371
Niels Möller5a6ae022019-01-21 11:59:10 +0100372 EXPECT_EQ(kBufferLength,
373 ReadInt16BufferFromFile(&file, kBufferLength, read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200374 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000375 kBufferLength * sizeof(written_buffer[0])));
376}
377
Peter Boströme2976c82016-01-04 22:44:05 +0100378#if defined(WEBRTC_IOS)
379#define MAYBE_WriteFloatBufferToFile DISABLED_WriteFloatBufferToFile
380#else
381#define MAYBE_WriteFloatBufferToFile WriteFloatBufferToFile
382#endif
383TEST_F(TransientFileUtilsTest, MAYBE_WriteFloatBufferToFile) {
Yves Gerey665174f2018-06-19 15:03:05 +0200384 std::string kOutFileName =
385 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000386
Niels Möller5a6ae022019-01-21 11:59:10 +0100387 FileWrapper file = FileWrapper::OpenWriteOnly(kOutFileName.c_str());
388 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
389 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000390
391 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800392 std::unique_ptr<float[]> written_buffer(new float[kBufferLength]);
393 std::unique_ptr<float[]> read_buffer(new float[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000394
conceptgenesis3f705622016-01-30 14:40:44 -0800395 written_buffer[0] = static_cast<float>(kPi);
396 written_buffer[1] = static_cast<float>(kE);
397 written_buffer[2] = static_cast<float>(kAvogadro);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000398
Niels Möller5a6ae022019-01-21 11:59:10 +0100399 EXPECT_EQ(kBufferLength,
400 WriteFloatBufferToFile(&file, kBufferLength, written_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000401
Niels Möller5a6ae022019-01-21 11:59:10 +0100402 file.Close();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000403
Niels Möller5a6ae022019-01-21 11:59:10 +0100404 file = FileWrapper::OpenReadOnly(kOutFileName.c_str());
405 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
406 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000407
Niels Möller5a6ae022019-01-21 11:59:10 +0100408 EXPECT_EQ(kBufferLength,
409 ReadFloatBufferFromFile(&file, kBufferLength, read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200410 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000411 kBufferLength * sizeof(written_buffer[0])));
412}
413
Peter Boströme2976c82016-01-04 22:44:05 +0100414#if defined(WEBRTC_IOS)
415#define MAYBE_WriteDoubleBufferToFile DISABLED_WriteDoubleBufferToFile
416#else
417#define MAYBE_WriteDoubleBufferToFile WriteDoubleBufferToFile
418#endif
419TEST_F(TransientFileUtilsTest, MAYBE_WriteDoubleBufferToFile) {
Yves Gerey665174f2018-06-19 15:03:05 +0200420 std::string kOutFileName =
421 CreateTempFilename(test::OutputPath(), "utils_test");
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000422
Niels Möller5a6ae022019-01-21 11:59:10 +0100423 FileWrapper file = FileWrapper::OpenWriteOnly(kOutFileName.c_str());
424 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
425 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000426
427 const size_t kBufferLength = 3;
kwiberg85d8bb02016-02-16 20:39:36 -0800428 std::unique_ptr<double[]> written_buffer(new double[kBufferLength]);
429 std::unique_ptr<double[]> read_buffer(new double[kBufferLength]);
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000430
431 written_buffer[0] = kPi;
432 written_buffer[1] = kE;
433 written_buffer[2] = kAvogadro;
434
Niels Möller5a6ae022019-01-21 11:59:10 +0100435 EXPECT_EQ(kBufferLength, WriteDoubleBufferToFile(&file, kBufferLength,
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000436 written_buffer.get()));
437
Niels Möller5a6ae022019-01-21 11:59:10 +0100438 file.Close();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000439
Niels Möller5a6ae022019-01-21 11:59:10 +0100440 file = FileWrapper::OpenReadOnly(kOutFileName.c_str());
441 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
442 << kOutFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000443
Niels Möller5a6ae022019-01-21 11:59:10 +0100444 EXPECT_EQ(kBufferLength,
445 ReadDoubleBufferFromFile(&file, kBufferLength, read_buffer.get()));
Yves Gerey665174f2018-06-19 15:03:05 +0200446 EXPECT_EQ(0, memcmp(written_buffer.get(), read_buffer.get(),
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000447 kBufferLength * sizeof(written_buffer[0])));
448}
449
Peter Boströme2976c82016-01-04 22:44:05 +0100450#if defined(WEBRTC_IOS)
451#define MAYBE_ExpectedErrorReturnValues DISABLED_ExpectedErrorReturnValues
452#else
453#define MAYBE_ExpectedErrorReturnValues ExpectedErrorReturnValues
454#endif
455TEST_F(TransientFileUtilsTest, MAYBE_ExpectedErrorReturnValues) {
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000456 std::string test_filename = kTestFileName;
457
458 double value;
kwiberg85d8bb02016-02-16 20:39:36 -0800459 std::unique_ptr<int16_t[]> int16_buffer(new int16_t[1]);
460 std::unique_ptr<double[]> double_buffer(new double[1]);
Niels Möller5a6ae022019-01-21 11:59:10 +0100461 FileWrapper file;
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000462
463 EXPECT_EQ(-1, ConvertByteArrayToDouble(NULL, &value));
464 EXPECT_EQ(-1, ConvertByteArrayToDouble(kPiBytes, NULL));
465
466 EXPECT_EQ(-1, ConvertDoubleToByteArray(kPi, NULL));
467
468 // Tests with file not opened.
Niels Möller5a6ae022019-01-21 11:59:10 +0100469 EXPECT_EQ(0u, ReadInt16BufferFromFile(&file, 1, int16_buffer.get()));
470 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(&file, 1, double_buffer.get()));
471 EXPECT_EQ(0u, ReadDoubleBufferFromFile(&file, 1, double_buffer.get()));
472 EXPECT_EQ(0u, WriteInt16BufferToFile(&file, 1, int16_buffer.get()));
473 EXPECT_EQ(0u, WriteDoubleBufferToFile(&file, 1, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000474
Niels Möller5a6ae022019-01-21 11:59:10 +0100475 file = FileWrapper::OpenReadOnly(test_filename.c_str());
476 ASSERT_TRUE(file.is_open()) << "File could not be opened:\n"
477 << kTestFileName.c_str();
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000478
479 EXPECT_EQ(0u, ReadInt16BufferFromFile(NULL, 1, int16_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100480 EXPECT_EQ(0u, ReadInt16BufferFromFile(&file, 1, NULL));
481 EXPECT_EQ(0u, ReadInt16BufferFromFile(&file, 0, int16_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000482
483 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(NULL, 1, double_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100484 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(&file, 1, NULL));
485 EXPECT_EQ(0u, ReadInt16FromFileToDoubleBuffer(&file, 0, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000486
487 EXPECT_EQ(0u, ReadDoubleBufferFromFile(NULL, 1, double_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100488 EXPECT_EQ(0u, ReadDoubleBufferFromFile(&file, 1, NULL));
489 EXPECT_EQ(0u, ReadDoubleBufferFromFile(&file, 0, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000490
491 EXPECT_EQ(0u, WriteInt16BufferToFile(NULL, 1, int16_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100492 EXPECT_EQ(0u, WriteInt16BufferToFile(&file, 1, NULL));
493 EXPECT_EQ(0u, WriteInt16BufferToFile(&file, 0, int16_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000494
495 EXPECT_EQ(0u, WriteDoubleBufferToFile(NULL, 1, double_buffer.get()));
Niels Möller5a6ae022019-01-21 11:59:10 +0100496 EXPECT_EQ(0u, WriteDoubleBufferToFile(&file, 1, NULL));
497 EXPECT_EQ(0u, WriteDoubleBufferToFile(&file, 0, double_buffer.get()));
pbos@webrtc.org788acd12014-12-15 09:41:24 +0000498}
499
500} // namespace webrtc