// RUN: %clangxx_unit -O0 %s -o %t 2>&1 // RUN: %env_esan_opts="record_snapshots=0" %run %t 2>&1 | FileCheck %s #include "esan/esan_circular_buffer.h" #include "sanitizer_common/sanitizer_placement_new.h" #include #include static const int TestBufCapacity = 4; // The buffer should have a capacity of TestBufCapacity. void testBuffer(__esan::CircularBuffer *Buf) { assert(Buf->size() == 0); assert(Buf->empty()); Buf->push_back(1); assert(Buf->back() == 1); assert((*Buf)[0] == 1); assert(Buf->size() == 1); assert(!Buf->empty()); Buf->push_back(2); Buf->push_back(3); Buf->push_back(4); Buf->push_back(5); assert((*Buf)[0] == 2); assert(Buf->size() == 4); Buf->pop_back(); assert((*Buf)[0] == 2); assert(Buf->size() == 3); Buf->pop_back(); Buf->pop_back(); assert((*Buf)[0] == 2); assert(Buf->size() == 1); assert(!Buf->empty()); Buf->pop_back(); assert(Buf->empty()); } int main() { // Test initialize/free. __esan::CircularBuffer GlobalBuf; GlobalBuf.initialize(TestBufCapacity); testBuffer(&GlobalBuf); GlobalBuf.free(); // Test constructor/free. __esan::CircularBuffer *LocalBuf; static char placeholder[sizeof(*LocalBuf)]; LocalBuf = new(placeholder) __esan::CircularBuffer(TestBufCapacity); testBuffer(LocalBuf); LocalBuf->free(); fprintf(stderr, "All checks passed.\n"); // CHECK: All checks passed. return 0; }