34 #ifdef DEBUG_MEMORY_LIMITER
39 using namespace basis;
48 #define LOG(to_print) EMERGENCY_LOG(program_wide_logger().get(), astring(to_print))
60 test_memory_limiter() {}
62 virtual int execute();
71 mem_record(
int parent_in = 0,
int allocated_in = 0)
72 : parent(parent_in), allocated(allocated_in) {}
75 struct memorial :
array<mem_record> {};
79 int test_memory_limiter::execute()
99 if (!to_test.okay_allocation(parent, alloc))
101 wtc += mem_record(parent, alloc);
103 total_allocated += alloc;
104 }
else if (to_do < 88) {
106 if (!wtc.length())
continue;
107 int indy =
randomizer().inclusive(0, wtc.length() - 1);
108 mem_record to_gone = wtc[indy];
110 ASSERT_TRUE(to_test.record_deletion(to_gone.parent, to_gone.allocated),
111 "first case failed to record deletion!");
113 total_deleted += to_gone.allocated;
120 for (
int i = 0; i < wtc.length(); i++) {
121 mem_record to_gone = wtc[i];
122 ASSERT_TRUE(to_test.record_deletion(to_gone.parent, to_gone.allocated),
123 "second case failed to record deletion!");
125 total_deleted += to_gone.allocated;
130 ASSERT_FALSE(to_test.overall_usage(),
"final checks: there is still memory in use!");
133 "final checks: the free space is not correct!");
135 int_set remaining = to_test.individuals_listed();
140 LOG(
"stats for this run:");
141 LOG(
astring(astring::SPRINTF,
"\trun time %f ms",
143 LOG(
astring(astring::SPRINTF,
"\tallocations %d, total memory allocated %d",
144 allocations, total_allocated));
145 LOG(
astring(astring::SPRINTF,
"\tdeletions %d, total memory deleted %d",
146 deletions, total_deleted));
148 return final_report();
The application_shell is a base object for console programs.
Represents a sequential, ordered, contiguous collection of objects.
Provides a dynamically resizable ASCII character string.
A simple object that wraps a templated set of ints.
Tracks memory currently in use by memory manager objects.
int elements() const
Returns the number of elements in this set.
Represents a point in time relative to the operating system startup time.
time_representation value() const
returns the time_stamp in terms of the lower level type.
#define DEFINE_CLASS_NAME(objname)
Defines the name of a class by providing a couple standard methods.
#define FUNCDEF(func_in)
FUNCDEF sets the name of a function (and plugs it into the callstack).
Provides macros that implement the 'main' program of an application.
Implements an application lock to ensure only one is running at once.
The guards collection helps in testing preconditions and reporting errors.
const int MEGABYTE
Number of bytes in a megabyte.
const int SECOND_ms
Number of milliseconds in a second.
unsigned int un_int
Abbreviated name for unsigned integers.
const int KILOBYTE
Number of bytes in a kilobyte.
A platform independent way to obtain the timestamp of a file.
A logger that sends to the console screen using the standard output device.
An extension to floating point primitives providing approximate equality.
A dynamic container class that holds any kind of object via pointers.
Useful support functions for unit testing, especially within hoople.
const int MAXIMUM_MEM_PER_OWNER
const int MAXIMUM_MEM_OVERALL
HOOPLE_MAIN(test_memory_limiter,)
#define ASSERT_EQUAL(a, b, test_name)
#define ASSERT_TRUE(a, test_name)
#define ASSERT_FALSE(a, test_name)