inputbuffer_test.cc revision c8b59c046895fa5b6d79f73e0b5817330fcfbfc1
1c8b59c046895fa5b6d79f73e0b5817330fcfbfc1A. Unique TensorFlower/* Copyright 2015 The TensorFlow Authors. All Rights Reserved.
29c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur
39c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath KudlurLicensed under the Apache License, Version 2.0 (the "License");
49c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudluryou may not use this file except in compliance with the License.
59c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath KudlurYou may obtain a copy of the License at
69c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur
79c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur    http://www.apache.org/licenses/LICENSE-2.0
89c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur
99c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath KudlurUnless required by applicable law or agreed to in writing, software
109c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlurdistributed under the License is distributed on an "AS IS" BASIS,
119c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath KudlurWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
129c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath KudlurSee the License for the specific language governing permissions and
139c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlurlimitations under the License.
149c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur==============================================================================*/
159c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur
16f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur#include "tensorflow/core/lib/io/inputbuffer.h"
17f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
18b481783fe0e00a86f6feb20a8dcad5fc4fc936a4Josh Levenberg#include <vector>
193a7d603feaf6434ffd6d9fd27cac65c1ef565e07Josh Levenberg#include "tensorflow/core/platform/env.h"
20f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
2156313def004795f75ef8281a0294c958d28f1e06Vijay Vasudevan#include "tensorflow/core/lib/core/errors.h"
223a7d603feaf6434ffd6d9fd27cac65c1ef565e07Josh Levenberg#include "tensorflow/core/lib/core/status.h"
23f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur#include "tensorflow/core/lib/core/status_test_util.h"
2456313def004795f75ef8281a0294c958d28f1e06Vijay Vasudevan#include "tensorflow/core/lib/strings/strcat.h"
2556313def004795f75ef8281a0294c958d28f1e06Vijay Vasudevan#include "tensorflow/core/platform/logging.h"
26f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur#include "tensorflow/core/platform/test.h"
27f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
28f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlurnamespace tensorflow {
29f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
30f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlurstatic std::vector<int> BufferSizes() {
31f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  return {1,  2,  3,  4,  5,  6,  7,  8,  9,  10,   11,
32f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur          12, 13, 14, 15, 16, 17, 18, 19, 20, 65536};
33f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}
34f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
35f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath KudlurTEST(InputBuffer, ReadLine_Empty) {
36f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  Env* env = Env::Default();
37f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  string fname = testing::TmpDir() + "/inputbuffer_test";
38f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  WriteStringToFile(env, fname, "");
39f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
40f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  for (auto buf_size : BufferSizes()) {
41f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    RandomAccessFile* file;
42f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(env->NewRandomAccessFile(fname, &file));
43f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    string line;
44f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    io::InputBuffer in(file, buf_size);
45f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_TRUE(errors::IsOutOfRange(in.ReadLine(&line)));
46f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  }
47f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}
48f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
49f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath KudlurTEST(InputBuffer, ReadLine1) {
50f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  Env* env = Env::Default();
51f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  string fname = testing::TmpDir() + "/inputbuffer_test";
52f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  WriteStringToFile(env, fname, "line one\nline two\nline three\n");
53f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
54f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  for (auto buf_size : BufferSizes()) {
55f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    RandomAccessFile* file;
56f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(env->NewRandomAccessFile(fname, &file));
57f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    string line;
58f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    io::InputBuffer in(file, buf_size);
59f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadLine(&line));
60f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(line, "line one");
61f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadLine(&line));
62f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(line, "line two");
63f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadLine(&line));
64f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(line, "line three");
65f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_TRUE(errors::IsOutOfRange(in.ReadLine(&line)));
66f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    // A second call should also return end of file
67f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_TRUE(errors::IsOutOfRange(in.ReadLine(&line)));
68f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  }
69f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}
70f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
71f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath KudlurTEST(InputBuffer, ReadLine_NoTrailingNewLine) {
72f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  Env* env = Env::Default();
73f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  string fname = testing::TmpDir() + "/inputbuffer_test";
74f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  WriteStringToFile(env, fname, "line one\nline two\nline three");
75f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
76f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  for (auto buf_size : BufferSizes()) {
77f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    RandomAccessFile* file;
78f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(env->NewRandomAccessFile(fname, &file));
79f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    string line;
80f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    io::InputBuffer in(file, buf_size);
81f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadLine(&line));
82f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(line, "line one");
83f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadLine(&line));
84f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(line, "line two");
85f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadLine(&line));
86f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(line, "line three");
87f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_TRUE(errors::IsOutOfRange(in.ReadLine(&line)));
88f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    // A second call should also return end of file
89f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_TRUE(errors::IsOutOfRange(in.ReadLine(&line)));
90f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  }
91f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}
92f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
93f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath KudlurTEST(InputBuffer, ReadLine_EmptyLines) {
94f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  Env* env = Env::Default();
95f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  string fname = testing::TmpDir() + "/inputbuffer_test";
96f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  WriteStringToFile(env, fname, "line one\n\n\nline two\nline three");
97f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
98f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  for (auto buf_size : BufferSizes()) {
99f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    RandomAccessFile* file;
100f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(env->NewRandomAccessFile(fname, &file));
101f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    string line;
102f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    io::InputBuffer in(file, buf_size);
103f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadLine(&line));
104f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(line, "line one");
105f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadLine(&line));
106f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(line, "");
107f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadLine(&line));
108f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(line, "");
109f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadLine(&line));
110f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(line, "line two");
111f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadLine(&line));
112f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(line, "line three");
113f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_TRUE(errors::IsOutOfRange(in.ReadLine(&line)));
114f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    // A second call should also return end of file
115f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_TRUE(errors::IsOutOfRange(in.ReadLine(&line)));
116f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  }
117f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}
118f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
1191c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlowerTEST(InputBuffer, ReadLine_CRLF) {
1201c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower  Env* env = Env::Default();
1211c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower  string fname = testing::TmpDir() + "/inputbuffer_test";
1221c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower  WriteStringToFile(env, fname, "line one\r\n\r\n\r\nline two\r\nline three");
1231c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower
1241c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower  for (auto buf_size : BufferSizes()) {
1251c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    RandomAccessFile* file;
1261c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    TF_CHECK_OK(env->NewRandomAccessFile(fname, &file));
1271c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    string line;
1281c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    io::InputBuffer in(file, buf_size);
1291c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    TF_CHECK_OK(in.ReadLine(&line));
1301c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    EXPECT_EQ(line, "line one");
1311c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    TF_CHECK_OK(in.ReadLine(&line));
1321c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    EXPECT_EQ(line, "");
1331c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    TF_CHECK_OK(in.ReadLine(&line));
1341c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    EXPECT_EQ(line, "");
1351c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    TF_CHECK_OK(in.ReadLine(&line));
1361c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    EXPECT_EQ(line, "line two");
1371c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    TF_CHECK_OK(in.ReadLine(&line));
1381c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    EXPECT_EQ(line, "line three");
1391c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    EXPECT_TRUE(errors::IsOutOfRange(in.ReadLine(&line)));
1401c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    // A second call should also return end of file
1411c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower    EXPECT_TRUE(errors::IsOutOfRange(in.ReadLine(&line)));
1421c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower  }
1431c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower}
1441c579361cd1e088dd5e05a394b1561a73e3667baA. Unique TensorFlower
145f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath KudlurTEST(InputBuffer, ReadNBytes) {
146f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  Env* env = Env::Default();
147f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  string fname = testing::TmpDir() + "/inputbuffer_test";
148f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  WriteStringToFile(env, fname, "0123456789");
149f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
150f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  for (auto buf_size : BufferSizes()) {
151f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    RandomAccessFile* file;
152f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(env->NewRandomAccessFile(fname, &file));
153f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    string read;
154f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    io::InputBuffer in(file, buf_size);
155f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(0, in.Tell());
156f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadNBytes(3, &read));
157f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(read, "012");
158f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(3, in.Tell());
159f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadNBytes(0, &read));
160f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(read, "");
161f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(3, in.Tell());
162f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadNBytes(4, &read));
163f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(read, "3456");
164f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(7, in.Tell());
165f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadNBytes(0, &read));
166f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(read, "");
167f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(7, in.Tell());
168f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_TRUE(errors::IsOutOfRange(in.ReadNBytes(5, &read)));
169f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(read, "789");
170f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(10, in.Tell());
171f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_TRUE(errors::IsOutOfRange(in.ReadNBytes(5, &read)));
172f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(read, "");
173f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(10, in.Tell());
174f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadNBytes(0, &read));
175f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(read, "");
176f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(10, in.Tell());
177f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  }
178f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}
179f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
180f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath KudlurTEST(InputBuffer, SkipNBytes) {
181f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  Env* env = Env::Default();
182f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  string fname = testing::TmpDir() + "/inputbuffer_test";
183f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  WriteStringToFile(env, fname, "0123456789");
184f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
185f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  for (auto buf_size : BufferSizes()) {
186f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    RandomAccessFile* file;
187f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(env->NewRandomAccessFile(fname, &file));
188f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    string read;
189f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    io::InputBuffer in(file, buf_size);
190f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(0, in.Tell());
191f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.SkipNBytes(3));
192f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(3, in.Tell());
193f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.SkipNBytes(0));
194f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(3, in.Tell());
195f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadNBytes(2, &read));
196f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(read, "34");
197f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(5, in.Tell());
198f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.SkipNBytes(0));
199f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(5, in.Tell());
200f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.SkipNBytes(2));
201f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(7, in.Tell());
202f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    TF_CHECK_OK(in.ReadNBytes(1, &read));
203f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(read, "7");
204f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(8, in.Tell());
205f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_TRUE(errors::IsOutOfRange(in.SkipNBytes(5)));
206f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(10, in.Tell());
207f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_TRUE(errors::IsOutOfRange(in.SkipNBytes(5)));
208f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(10, in.Tell());
209f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_TRUE(errors::IsOutOfRange(in.ReadNBytes(5, &read)));
210f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(read, "");
211f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    EXPECT_EQ(10, in.Tell());
212f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  }
213f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}
214f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
215f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}  // namespace tensorflow
216