• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * @file utility_tests.cpp
3  * tests utility.h and op_exception.h
4  *
5  * @remark Copyright 2003 OProfile authors
6  * @remark Read the file COPYING
7  *
8  * @author John Levon
9  * @author Philippe Elie
10  */
11 
12 #include <stdlib.h>
13 #include <new>
14 #include <iostream>
15 
16 #include "utility.h"
17 #include "op_exception.h"
18 
19 using namespace std;
20 
21 static int nb_new;
22 static int nb_new_array;
23 
operator new(size_t size)24 void* operator new(size_t size) throw(bad_alloc)
25 {
26 	nb_new++;
27 	return malloc(size);
28 }
29 
operator new[](size_t size)30 void* operator new[](size_t size) throw(bad_alloc)
31 {
32 	nb_new_array++;
33 	return malloc(size);
34 }
35 
operator delete(void * p)36 void operator delete(void * p) throw()
37 {
38 	nb_new--;
39 	if (p)
40 		free(p);
41 }
42 
operator delete[](void * p)43 void operator delete[](void * p) throw()
44 {
45 	nb_new_array--;
46 	if (p)
47 		free(p);
48 }
49 
50 
check_alloc()51 void check_alloc()
52 {
53 	if (nb_new) {
54 		cerr << "new(size_t) leak\n";
55 		exit(EXIT_FAILURE);
56 	}
57 
58 	if (nb_new_array) {
59 		cerr << "new[](size_t) leak\n";
60 		exit(EXIT_FAILURE);
61 	}
62 }
63 
64 
65 struct A {};
66 
67 template <typename Throw, typename Catch>
throw_tests()68 void throw_tests()
69 {
70 	scoped_ptr<A> a(new A);
71 	try {
72 		scoped_ptr<A> a(new A);
73 		throw Throw("");
74 	}
75 	catch (Catch const &) {
76 	}
77 }
78 
79 
80 template <typename Throw, typename Catch>
throw_tests(bool)81 void throw_tests(bool)
82 {
83 	scoped_array<A> b(new A[10]);
84 	try {
85 		scoped_array<A> a(new A[10]);
86 		throw Throw("");
87 	}
88 	catch (Catch const &) {
89 	}
90 }
91 
92 
tests_new()93 void tests_new()
94 {
95 	throw_tests<op_fatal_error, op_fatal_error>();
96 	throw_tests<op_fatal_error, op_exception>();
97 	throw_tests<op_runtime_error, op_runtime_error>();
98 	throw_tests<op_runtime_error, runtime_error>();
99 	throw_tests<op_fatal_error, op_fatal_error>(true);
100 	throw_tests<op_fatal_error, op_exception>(true);
101 	throw_tests<op_runtime_error, op_runtime_error>(true);
102 	throw_tests<op_runtime_error, runtime_error>(true);
103 }
104 
105 
main()106 int main()
107 {
108 	try {
109 		tests_new();
110 		check_alloc();
111 	}
112 	catch (...) {
113 		cerr << "unknown exception\n";
114 		return EXIT_FAILURE;
115 	}
116 
117 	return EXIT_SUCCESS;
118 }
119