summaryrefslogtreecommitdiff
path: root/cras/src/tests/byte_buffer_unittest.cc
blob: 7b28b0fd9c01ecdff02c53be901f77d475270b7b (plain)
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// Copyright 2015 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "byte_buffer.h"

#include <gtest/gtest.h>

namespace {

TEST(ByteBuffer, ReadWrite) {
  struct byte_buffer* b;
  uint8_t* data;
  unsigned int data_size;

  b = byte_buffer_create(100);
  EXPECT_EQ(100, buf_available(b));
  EXPECT_EQ(0, buf_queued(b));

  data = buf_read_pointer_size(b, &data_size);
  EXPECT_NE((void*)NULL, data);
  EXPECT_EQ(0, data_size);

  data = buf_write_pointer_size(b, &data_size);
  EXPECT_NE((void*)NULL, data);
  EXPECT_EQ(100, data_size);

  buf_increment_write(b, 50);
  data = buf_read_pointer_size(b, &data_size);
  EXPECT_NE((void*)NULL, data);
  EXPECT_EQ(50, data_size);

  buf_increment_read(b, 40);
  EXPECT_EQ(10, buf_queued(b));
  EXPECT_EQ(90, buf_available(b));

  /* Test write to the end of ring buffer. */
  data = buf_write_pointer_size(b, &data_size);
  EXPECT_NE((void*)NULL, data);
  EXPECT_EQ(50, data_size);

  buf_increment_write(b, 50);
  data = buf_write_pointer_size(b, &data_size);
  EXPECT_NE((void*)NULL, data);
  EXPECT_EQ(40, data_size);

  byte_buffer_destroy(&b);
}

TEST(ByteBuffer, SetUsedSizeReadWrite) {
  struct byte_buffer* b;
  uint8_t* data;
  unsigned int data_size;

  b = byte_buffer_create(100);
  EXPECT_EQ(100, buf_available(b));
  EXPECT_EQ(0, buf_queued(b));

  /* Test set used_size to limit the initial allocated max size. */
  byte_buffer_set_used_size(b, 90);
  EXPECT_EQ(90, buf_available(b));

  data = buf_write_pointer_size(b, &data_size);
  EXPECT_NE((void*)NULL, data);
  EXPECT_EQ(90, data_size);

  buf_increment_write(b, 90);
  data = buf_read_pointer_size(b, &data_size);
  EXPECT_NE((void*)NULL, data);
  EXPECT_EQ(90, data_size);

  buf_increment_read(b, 50);
  EXPECT_EQ(50, buf_available(b));
  EXPECT_EQ(40, buf_queued(b));

  data = buf_write_pointer_size(b, &data_size);
  EXPECT_NE((void*)NULL, data);
  EXPECT_EQ(50, data_size);

  buf_increment_write(b, 50);
  data = buf_write_pointer_size(b, &data_size);
  EXPECT_NE((void*)NULL, data);
  EXPECT_EQ(0, data_size);

  /* Test read to the end of ring buffer. */
  data = buf_read_pointer_size(b, &data_size);
  EXPECT_NE((void*)NULL, data);
  EXPECT_EQ(40, data_size);

  buf_increment_read(b, 40);
  data = buf_read_pointer_size(b, &data_size);
  EXPECT_NE((void*)NULL, data);
  EXPECT_EQ(50, data_size);

  byte_buffer_destroy(&b);
}

}  // namespace

int main(int argc, char** argv) {
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}