3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-25 10:05:32 +00:00

other components

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
Leonardo de Moura 2012-10-02 11:48:48 -07:00
parent e9eab22e5c
commit 68269c43a6
250 changed files with 70871 additions and 0 deletions

75
test/stack.cpp Normal file
View file

@ -0,0 +1,75 @@
/*++
Copyright (c) 2007 Microsoft Corporation
Module Name:
stack.cpp
Abstract:
Low level stack (aka stack-based allocator).
Author:
Leonardo (leonardo) 2011-02-27
Notes:
--*/
#include<utility>
#include"stack.h"
#include"vector.h"
typedef std::pair<unsigned, unsigned> point;
static void tst1() {
stack s;
point * p1 = new (s) point(10, 20);
point * p2 = new (s) point(30, 40);
void * ptr = s.allocate(16000);
SASSERT(p2->first == 30 && p2->second == 40);
SASSERT(p1->first == 10 && p1->second == 20);
s.deallocate(static_cast<int*>(ptr));
s.deallocate(p2);
s.deallocate(p1);
}
static void tst2(unsigned num, unsigned del_rate) {
ptr_vector<char> ptrs;
stack s;
for (unsigned i = 0; i < num; i++) {
SASSERT(ptrs.empty() == s.empty());
SASSERT(s.empty() || ptrs.back() == s.top());
if (!ptrs.empty() && rand() % del_rate == 0) {
s.deallocate();
ptrs.pop_back();
}
else {
unsigned size;
if (rand()%10 == 0) {
size = 8192 + rand()%800;
}
else {
size = rand()%100;
}
char * ptr = static_cast<char*>(s.allocate(size));
ptrs.push_back(ptr);
}
}
while (s.empty()) {
SASSERT(ptrs.empty() == s.empty());
SASSERT(s.empty() || ptrs.back() == s.top());
s.deallocate();
ptrs.pop_back();
}
}
void tst_stack() {
tst1();
tst2(1000, 10);
tst2(2000, 2);
tst2(100000, 10);
tst2(300000, 5);
tst2(300000, 2);
tst2(300000, 7);
}