-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathseek.test.cc
66 lines (49 loc) · 2.03 KB
/
seek.test.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// Copyright (c) 2022 Mikael Simonsson <https://mikaelsimonsson.com>.
// SPDX-License-Identifier: BSL-1.0
#include "snn-core/file/seek.hh"
#include "snn-core/unittest.hh"
#include "snn-core/file/offset.hh"
#include "snn-core/file/reader_writer.hh"
namespace snn
{
void unittest()
{
file::reader_writer r;
snn_require(r.open_for_reading("seek.test.cc"));
snn_require(r);
const int fd = r.descriptor().value();
snn_require(file::offset(fd).value_or(123) == 0);
snn_require(file::seek(fd, 1));
snn_require(file::offset(fd).value_or_default() == 1);
snn_require(file::seek(fd, usize{5}));
snn_require(file::offset(fd).value_or_default() == 5);
snn_require(file::seek(fd, -2, file::whence::current));
snn_require(file::offset(fd).value_or_default() == 3);
str s;
snn_require(r.read_some(s.resize_uninitialized(4)).value() == 4);
snn_require(s == "Copy");
snn_require(file::offset(fd).value_or_default() == 7);
snn_require(file::seek(fd, 0));
snn_require(file::offset(fd).value_or(123) == 0);
snn_require(r.read_some(s.resize_uninitialized(12)).value() == 12);
snn_require(s == "// Copyright");
snn_require(file::offset(fd).value_or_default() == 12);
snn_require(file::seek(fd, 0, file::whence::end));
snn_require(file::offset(fd).value_or_default() > 1'000);
{
auto res = file::seek(fd, -5'000, file::whence::current);
snn_require(!res);
snn_require(res.error_code() == make_error_code(EINVAL, system::error_category));
}
{
auto res = file::seek(fd, constant::limit<usize>::max);
snn_require(!res);
snn_require(res.error_code() == make_error_code(EINVAL, system::error_category));
}
{
auto res = file::seek(-1, 123);
snn_require(!res);
snn_require(res.error_code() == make_error_code(EBADF, system::error_category));
}
}
}