tests: Convert CircleBuf unit test to a GTest

Change-Id: I028c6b8d8e0ec06cac3d636689ae647f717096cd
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/13735
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
This commit is contained in:
Andreas Sandberg
2018-10-24 11:50:03 +01:00
parent 0330c434e2
commit 78addea341
3 changed files with 72 additions and 73 deletions

View File

@@ -84,6 +84,7 @@ Source('stats/text.cc')
GTest('addr_range_test', 'addr_range_test.cc')
GTest('bituniontest', 'bituniontest.cc')
GTest('CircleBufTest', 'circlebuftest.cc')
DebugFlag('Annotate', "State machine annotation debugging")
DebugFlag('AnnotateQ', "State machine annotation queue debugging")

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2015 ARM Limited
* Copyright (c) 2015, 2018 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -37,85 +37,84 @@
* Authors: Andreas Sandberg
*/
#include <gtest/gtest.h>
#include "base/circlebuf.hh"
#include "unittest/unittest.hh"
const char data[] = {
0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf,
};
int
main(int argc, char *argv[])
// Basic non-overflow functionality
TEST(CircleBufTest, BasicReadWriteNoOverflow)
{
UnitTest::setCase("Basic non-overflow functionality");
{
CircleBuf<char> buf(8);
char foo[16];
CircleBuf<char> buf(8);
char foo[16];
// Write empty buffer, no overflow
buf.write(data, 8);
EXPECT_EQ(buf.size(), 8);
buf.peek(foo, 8);
EXPECT_EQ(memcmp(foo, data, 8), 0);
// Write empty buffer, no overflow
buf.write(data, 8);
EXPECT_EQ(buf.size(), 8);
buf.peek(foo, 8);
EXPECT_EQ(memcmp(foo, data, 8), 0);
// Read 2
buf.read(foo, 2);
EXPECT_EQ(memcmp(foo, data, 2), 0);
EXPECT_EQ(buf.size(), 6);
buf.read(foo, 6);
EXPECT_EQ(memcmp(foo, data + 2, 6), 0);
EXPECT_EQ(buf.size(), 0);
}
UnitTest::setCase("Basic single write overflow functionality");
{
CircleBuf<char> buf(8);
char foo[16];
buf.write(data, 16);
EXPECT_EQ(buf.size(), 8);
buf.peek(foo, 8);
EXPECT_EQ(memcmp(data + 8, foo, 8), 0);
}
UnitTest::setCase("Multi-write overflow functionality");
{
CircleBuf<char> buf(8);
char foo[16];
// Write, no overflow, write overflow
buf.write(data, 6);
buf.write(data + 8, 6);
EXPECT_EQ(buf.size(), 8);
buf.peek(foo, 8);
EXPECT_EQ(memcmp(data + 4, foo, 2), 0);
EXPECT_EQ(memcmp(data + 8, foo + 2, 6), 0);
}
UnitTest::setCase("Pointer wrap around");
{
CircleBuf<char> buf(8);
char foo[16];
// _start == 0, _stop = 8
buf.write(data, 8);
// _start == 4, _stop = 8
buf.read(foo, 4);
// _start == 4, _stop = 12
buf.write(data + 8, 4);
EXPECT_EQ(buf.size(), 8);
// _start == 10, _stop = 12
// Normalized: _start == 2, _stop = 4
buf.read(foo + 4, 6);
EXPECT_EQ(buf.size(), 2);
EXPECT_EQ(memcmp(data, foo, 10), 0);
// Normalized: _start == 4, _stop = 4
buf.read(foo + 10, 2);
EXPECT_EQ(buf.size(), 0);
EXPECT_EQ(memcmp(data, foo, 12), 0);
}
return UnitTest::printResults();
// Read 2
buf.read(foo, 2);
EXPECT_EQ(memcmp(foo, data, 2), 0);
EXPECT_EQ(buf.size(), 6);
buf.read(foo, 6);
EXPECT_EQ(memcmp(foo, data + 2, 6), 0);
EXPECT_EQ(buf.size(), 0);
}
// Basic single write overflow functionality
TEST(CircleBufTest, SingleWriteOverflow)
{
CircleBuf<char> buf(8);
char foo[16];
buf.write(data, 16);
EXPECT_EQ(buf.size(), 8);
buf.peek(foo, 8);
EXPECT_EQ(memcmp(data + 8, foo, 8), 0);
}
// Multi-write overflow functionality
TEST(CircleBufTest, MultiWriteOverflow)
{
CircleBuf<char> buf(8);
char foo[16];
// Write, no overflow, write overflow
buf.write(data, 6);
buf.write(data + 8, 6);
EXPECT_EQ(buf.size(), 8);
buf.peek(foo, 8);
EXPECT_EQ(memcmp(data + 4, foo, 2), 0);
EXPECT_EQ(memcmp(data + 8, foo + 2, 6), 0);
}
// Pointer wrap around
TEST(CircleBufTest, PointerWrapAround)
{
CircleBuf<char> buf(8);
char foo[16];
// _start == 0, _stop = 8
buf.write(data, 8);
// _start == 4, _stop = 8
buf.read(foo, 4);
// _start == 4, _stop = 12
buf.write(data + 8, 4);
EXPECT_EQ(buf.size(), 8);
// _start == 10, _stop = 12
// Normalized: _start == 2, _stop = 4
buf.read(foo + 4, 6);
EXPECT_EQ(buf.size(), 2);
EXPECT_EQ(memcmp(data, foo, 10), 0);
// Normalized: _start == 4, _stop = 4
buf.read(foo + 10, 2);
EXPECT_EQ(buf.size(), 0);
EXPECT_EQ(memcmp(data, foo, 12), 0);
}

View File

@@ -32,7 +32,6 @@ Import('*')
Source('unittest.cc')
UnitTest('circlebuf', 'circlebuf.cc')
UnitTest('cprintftime', 'cprintftime.cc')
UnitTest('initest', 'initest.cc')
UnitTest('nmtest', 'nmtest.cc')