1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// The test buffer data is 52 bytes, wrap position is set to 20 (this is
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// arbitrarily chosen). The total buffer size is allocated dynamically based on
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// the actual header size. This gives:
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Header of some size, non-wrapping part 20 bytes, wrapping part 32 bytes.
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// As input data, a 14 byte array is used and repeatedly written. It's chosen
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// not to be an integer factor smaller than the wrapping part. This ensures that
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// the wrapped data isn't repeated at the same position.
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Note that desipte the number of wraps (if one or more), the reference output
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// data is the same since the offset at each wrap is always the same.
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/common/partial_circular_buffer.h"
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const uint32 kWrapPosition = 20;
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const uint8 kInputData[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const uint8 kOutputRefDataWrap[] =
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // The 20 bytes in the non-wrapping part.
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1, 2, 3, 4, 5, 6,
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     // The 32 bytes in wrapping part.
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     11, 12, 13, 14,
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PartialCircularBufferTest : public testing::Test {
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  PartialCircularBufferTest() {
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    PartialCircularBuffer::BufferData test_struct;
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    buffer_header_size_ =
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        &test_struct.data[0] - reinterpret_cast<uint8*>(&test_struct);
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    buffer_.reset(new uint8[buffer_header_size_ + sizeof(kOutputRefDataWrap)]);
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void InitWriteBuffer(bool append) {
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    pcb_write_.reset(new PartialCircularBuffer(
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        buffer_.get(),
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        buffer_header_size_ + sizeof(kOutputRefDataWrap),
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        kWrapPosition,
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        append));
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void WriteToBuffer(int num) {
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    for (int i = 0; i < num; ++i)
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      pcb_write_->Write(kInputData, sizeof(kInputData));
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void InitReadBuffer() {
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    pcb_read_.reset(new PartialCircularBuffer(
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        buffer_.get(), buffer_header_size_ + sizeof(kOutputRefDataWrap)));
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<PartialCircularBuffer> pcb_write_;
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<PartialCircularBuffer> pcb_read_;
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<uint8[]> buffer_;
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  uint32 buffer_header_size_;
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PartialCircularBufferTest);
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(PartialCircularBufferTest, NoWrapBeginningPartOnly) {
677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  InitWriteBuffer(false);
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  WriteToBuffer(1);
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  InitReadBuffer();
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  uint8 output_data[sizeof(kInputData)] = {0};
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(sizeof(output_data),
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            pcb_read_->Read(output_data, sizeof(output_data)));
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0, memcmp(kInputData, output_data, sizeof(kInputData)));
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0u, pcb_read_->Read(output_data, sizeof(output_data)));
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(PartialCircularBufferTest, NoWrapBeginningAndEndParts) {
817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  InitWriteBuffer(false);
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  WriteToBuffer(2);
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  InitReadBuffer();
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  uint8 output_data[2 * sizeof(kInputData)] = {0};
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(sizeof(output_data),
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            pcb_read_->Read(output_data, sizeof(output_data)));
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const uint8 output_ref_data[2 * sizeof(kInputData)] =
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)       1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0, memcmp(output_ref_data, output_data, sizeof(output_data)));
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0u, pcb_read_->Read(output_data, sizeof(output_data)));
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(PartialCircularBufferTest, WrapOnce) {
987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  InitWriteBuffer(false);
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  WriteToBuffer(4);
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  InitReadBuffer();
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  uint8 output_data[sizeof(kOutputRefDataWrap)] = {0};
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(sizeof(output_data),
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            pcb_read_->Read(output_data, sizeof(output_data)));
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0, memcmp(kOutputRefDataWrap, output_data, sizeof(output_data)));
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0u, pcb_read_->Read(output_data, sizeof(output_data)));
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(PartialCircularBufferTest, WrapTwice) {
1127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  InitWriteBuffer(false);
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  WriteToBuffer(7);
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  InitReadBuffer();
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  uint8 output_data[sizeof(kOutputRefDataWrap)] = {0};
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(sizeof(output_data),
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            pcb_read_->Read(output_data, sizeof(output_data)));
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0, memcmp(kOutputRefDataWrap, output_data, sizeof(output_data)));
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0u, pcb_read_->Read(output_data, sizeof(output_data)));
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(PartialCircularBufferTest, WrapOnceSmallerOutputBuffer) {
1267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  InitWriteBuffer(false);
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  WriteToBuffer(4);
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  InitReadBuffer();
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  uint8 output_data[sizeof(kOutputRefDataWrap)] = {0};
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const uint32 size_per_read = 16;
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  uint32 read = 0;
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (; read + size_per_read <= sizeof(output_data); read += size_per_read) {
134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_EQ(size_per_read,
135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              pcb_read_->Read(output_data + read, size_per_read));
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(sizeof(output_data) - read,
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            pcb_read_->Read(output_data + read, size_per_read));
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0, memcmp(kOutputRefDataWrap, output_data, sizeof(output_data)));
141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0u, pcb_read_->Read(output_data, sizeof(output_data)));
143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
1447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(PartialCircularBufferTest, WrapOnceWithAppend) {
1467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  InitWriteBuffer(false);
1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  WriteToBuffer(2);
1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  InitWriteBuffer(true);
1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  WriteToBuffer(2);
1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  InitReadBuffer();
1517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  uint8 output_data[sizeof(kOutputRefDataWrap)] = {0};
1537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(sizeof(output_data),
1547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            pcb_read_->Read(output_data, sizeof(output_data)));
1557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(0, memcmp(kOutputRefDataWrap, output_data, sizeof(output_data)));
1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(0u, pcb_read_->Read(output_data, sizeof(output_data)));
1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(PartialCircularBufferTest, WrapTwiceWithAppend) {
1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  InitWriteBuffer(false);
1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  WriteToBuffer(4);
1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  InitWriteBuffer(true);
1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  WriteToBuffer(3);
1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  InitReadBuffer();
1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  uint8 output_data[sizeof(kOutputRefDataWrap)] = {0};
1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(sizeof(output_data),
1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            pcb_read_->Read(output_data, sizeof(output_data)));
1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(0, memcmp(kOutputRefDataWrap, output_data, sizeof(output_data)));
1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(0u, pcb_read_->Read(output_data, sizeof(output_data)));
1757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(PartialCircularBufferTest, WrapOnceThenOverwriteWithNoWrap) {
1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  InitWriteBuffer(false);
1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  WriteToBuffer(4);
1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  InitWriteBuffer(false);
1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  WriteToBuffer(1);
1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  InitReadBuffer();
1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  uint8 output_data[sizeof(kInputData)] = {0};
1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(sizeof(output_data),
1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            pcb_read_->Read(output_data, sizeof(output_data)));
1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(0, memcmp(kInputData, output_data, sizeof(kInputData)));
1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(0u, pcb_read_->Read(output_data, sizeof(output_data)));
1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
192