1*7c3d14c8STreehugger Robot // RUN: %clangxx_unit -O0 %s -o %t 2>&1 2*7c3d14c8STreehugger Robot // RUN: %env_esan_opts="record_snapshots=0" %run %t 2>&1 | FileCheck %s 3*7c3d14c8STreehugger Robot 4*7c3d14c8STreehugger Robot #include "esan/esan_circular_buffer.h" 5*7c3d14c8STreehugger Robot #include "sanitizer_common/sanitizer_placement_new.h" 6*7c3d14c8STreehugger Robot #include <assert.h> 7*7c3d14c8STreehugger Robot #include <stdio.h> 8*7c3d14c8STreehugger Robot 9*7c3d14c8STreehugger Robot static const int TestBufCapacity = 4; 10*7c3d14c8STreehugger Robot 11*7c3d14c8STreehugger Robot // The buffer should have a capacity of TestBufCapacity. testBuffer(__esan::CircularBuffer<int> * Buf)12*7c3d14c8STreehugger Robotvoid testBuffer(__esan::CircularBuffer<int> *Buf) { 13*7c3d14c8STreehugger Robot assert(Buf->size() == 0); 14*7c3d14c8STreehugger Robot assert(Buf->empty()); 15*7c3d14c8STreehugger Robot 16*7c3d14c8STreehugger Robot Buf->push_back(1); 17*7c3d14c8STreehugger Robot assert(Buf->back() == 1); 18*7c3d14c8STreehugger Robot assert((*Buf)[0] == 1); 19*7c3d14c8STreehugger Robot assert(Buf->size() == 1); 20*7c3d14c8STreehugger Robot assert(!Buf->empty()); 21*7c3d14c8STreehugger Robot 22*7c3d14c8STreehugger Robot Buf->push_back(2); 23*7c3d14c8STreehugger Robot Buf->push_back(3); 24*7c3d14c8STreehugger Robot Buf->push_back(4); 25*7c3d14c8STreehugger Robot Buf->push_back(5); 26*7c3d14c8STreehugger Robot assert((*Buf)[0] == 2); 27*7c3d14c8STreehugger Robot assert(Buf->size() == 4); 28*7c3d14c8STreehugger Robot 29*7c3d14c8STreehugger Robot Buf->pop_back(); 30*7c3d14c8STreehugger Robot assert((*Buf)[0] == 2); 31*7c3d14c8STreehugger Robot assert(Buf->size() == 3); 32*7c3d14c8STreehugger Robot 33*7c3d14c8STreehugger Robot Buf->pop_back(); 34*7c3d14c8STreehugger Robot Buf->pop_back(); 35*7c3d14c8STreehugger Robot assert((*Buf)[0] == 2); 36*7c3d14c8STreehugger Robot assert(Buf->size() == 1); 37*7c3d14c8STreehugger Robot assert(!Buf->empty()); 38*7c3d14c8STreehugger Robot 39*7c3d14c8STreehugger Robot Buf->pop_back(); 40*7c3d14c8STreehugger Robot assert(Buf->empty()); 41*7c3d14c8STreehugger Robot } 42*7c3d14c8STreehugger Robot main()43*7c3d14c8STreehugger Robotint main() 44*7c3d14c8STreehugger Robot { 45*7c3d14c8STreehugger Robot // Test initialize/free. 46*7c3d14c8STreehugger Robot __esan::CircularBuffer<int> GlobalBuf; 47*7c3d14c8STreehugger Robot GlobalBuf.initialize(TestBufCapacity); 48*7c3d14c8STreehugger Robot testBuffer(&GlobalBuf); 49*7c3d14c8STreehugger Robot GlobalBuf.free(); 50*7c3d14c8STreehugger Robot 51*7c3d14c8STreehugger Robot // Test constructor/free. 52*7c3d14c8STreehugger Robot __esan::CircularBuffer<int> *LocalBuf; 53*7c3d14c8STreehugger Robot static char placeholder[sizeof(*LocalBuf)]; 54*7c3d14c8STreehugger Robot LocalBuf = new(placeholder) __esan::CircularBuffer<int>(TestBufCapacity); 55*7c3d14c8STreehugger Robot testBuffer(LocalBuf); 56*7c3d14c8STreehugger Robot LocalBuf->free(); 57*7c3d14c8STreehugger Robot 58*7c3d14c8STreehugger Robot fprintf(stderr, "All checks passed.\n"); 59*7c3d14c8STreehugger Robot // CHECK: All checks passed. 60*7c3d14c8STreehugger Robot return 0; 61*7c3d14c8STreehugger Robot } 62