source: trunk/src/gcc/libstdc++-v3/testsuite/testsuite_hooks.h@ 2

Last change on this file since 2 was 2, checked in by bird, 23 years ago

Initial revision

  • Property cvs2svn:cvs-rev set to 1.1
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 6.0 KB
Line 
1// Utility subroutines for the C++ library testsuite.
2//
3// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
4//
5// This file is part of the GNU ISO C++ Library. This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 2, or (at your option)
9// any later version.
10//
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15//
16// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING. If not, write to the Free
18// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19// USA.
20//
21// As a special exception, you may use this file as part of a free software
22// library without restriction. Specifically, if other files instantiate
23// templates or use macros or inline functions from this file, or you compile
24// this file and link it with other files to produce an executable, this
25// file does not by itself cause the resulting executable to be covered by
26// the GNU General Public License. This exception does not however
27// invalidate any other reasons why the executable file might be covered by
28// the GNU General Public License.
29
30// This file provides the following:
31//
32// 1) VERIFY(), via DEBUG_ASSERT, from Brent Verner <[email protected]>.
33// This file is included in the various testsuite programs to provide
34// #define(able) assert() behavior for debugging/testing. It may be
35// a suitable location for other furry woodland creatures as well.
36//
37// 2) __set_testsuite_memlimit()
38// __set_testsuite_memlimit() uses setrlimit() to restrict dynamic memory
39// allocation. We provide a default memory limit if none is passed by the
40// calling application. The argument to __set_testsuite_memlimit() is the
41// limit in megabytes (a floating-point number). If _GLIBCPP_MEM_LIMITS is
42// not #defined before including this header, then no limiting is attempted.
43//
44// 3) gnu_counting_struct
45// This is a POD with a static data member, gnu_counting_struct::count,
46// which starts at zero, increments on instance construction, and decrements
47// on instance destruction. "assert_count(n)" can be called to VERIFY()
48// that the count equals N.
49//
50// 4) gnu_char, gnu_char_traits, abstract character classes and
51// char_traits specializations for testing instantiations.
52
53#ifndef _GLIBCPP_TESTSUITE_HOOKS_H
54#define _GLIBCPP_TESTSUITE_HOOKS_H
55
56#include <bits/c++config.h>
57#include <cstddef>
58
59#ifdef DEBUG_ASSERT
60# include <cassert>
61# define VERIFY(fn) assert(fn)
62#else
63# define VERIFY(fn) test &= (fn)
64#endif
65
66// Defined in GLIBCPP_CONFIGURE_TESTSUITE.
67#ifndef _GLIBCPP_MEM_LIMITS
68
69// Don't do memory limits.
70void
71__set_testsuite_memlimit(float x = 0)
72{ }
73
74#else
75
76// Do memory limits.
77#include <sys/resource.h>
78#include <unistd.h>
79
80#ifndef MEMLIMIT_MB
81#define MEMLIMIT_MB 16.0
82#endif
83
84void
85__set_testsuite_memlimit(float __size = MEMLIMIT_MB)
86{
87 struct rlimit r;
88 // Cater to the absence of rlim_t.
89 __typeof__ (r.rlim_cur) limit
90 = (__typeof__ (r.rlim_cur))(__size * 1048576);
91
92 // Heap size, seems to be common.
93#if _GLIBCPP_HAVE_MEMLIMIT_DATA
94 getrlimit(RLIMIT_DATA, &r);
95 r.rlim_cur = limit;
96 setrlimit(RLIMIT_DATA, &r);
97#endif
98
99 // Resident set size.
100#if _GLIBCPP_HAVE_MEMLIMIT_RSS
101 getrlimit(RLIMIT_RSS, &r);
102 r.rlim_cur = limit;
103 setrlimit(RLIMIT_RSS, &r);
104#endif
105
106 // Mapped memory (brk + mmap).
107#if _GLIBCPP_HAVE_MEMLIMIT_VMEM
108 getrlimit(RLIMIT_VMEM, &r);
109 r.rlim_cur = limit;
110 setrlimit(RLIMIT_VMEM, &r);
111#endif
112
113 // Virtual memory.
114#if _GLIBCPP_HAVE_MEMLIMIT_AS
115 getrlimit(RLIMIT_AS, &r);
116 r.rlim_cur = limit;
117 setrlimit(RLIMIT_AS, &r);
118#endif
119}
120#endif
121
122
123struct gnu_counting_struct
124{
125 // Specifically and glaringly-obviously marked 'signed' so that when
126 // count mistakenly goes negative, we can track the patterns of