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:
parent
e9eab22e5c
commit
68269c43a6
250 changed files with 70871 additions and 0 deletions
75
test/stack.cpp
Normal file
75
test/stack.cpp
Normal 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);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue