aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/testsuite_hooks.h.in
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/testsuite/testsuite_hooks.h.in')
-rw-r--r--libstdc++-v3/testsuite/testsuite_hooks.h.in133
1 files changed, 133 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/testsuite_hooks.h.in b/libstdc++-v3/testsuite/testsuite_hooks.h.in
new file mode 100644
index 0000000..bee264f
--- /dev/null
+++ b/libstdc++-v3/testsuite/testsuite_hooks.h.in
@@ -0,0 +1,133 @@
+// Utility subroutines for the C++ library testsuite.
+//
+// Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file provides the following:
+//
+// 1) VERIFY(), via DEBUG_ASSERT, from Brent Verner <brent@rcfile.org>.
+// This file is included in the various testsuite programs to provide
+// #define(able) assert() behavior for debugging/testing. It may be
+// a suitable location for other furry woodland creatures as well.
+//
+// 2) __set_testsuite_memlimit()
+// __set_testsuite_memlimit() uses setrlimit() to restrict dynamic memory
+// allocation. We provide a default memory limit if none is passed by the
+// calling application. The argument to __set_testsuite_memlimit() is the
+// limit in megabytes (a floating-point number). If NO_MEM_LIMITS is
+// #defined before including this header, then no limiting is attempted.
+
+#ifndef _GLIBCPP_TESTSUITE_HOOKS_H
+#define _GLIBCPP_TESTSUITE_HOOKS_H
+
+
+/*******
+ * VERIFY(), via DEBUG_ASSERT, from Brent Verner <brent@rcfile.org>.
+*/
+#ifdef DEBUG_ASSERT
+# include <cassert>
+# define VERIFY(fn) assert(fn)
+
+#else
+
+# define VERIFY(fn) test &= (fn)
+// should we define this here to make sure no 'unexpected' failures
+// happen, or do we require that it be defined in any scope where
+// the VERIFY macro is used???
+//
+// static bool test = true;
+#endif
+
+
+/*******
+ * __set_testsuite_memlimit()
+*/
+// The RLIMIT_* macros used will be as many of the following as we can find,
+// and they will be used in this order, for whatever difference it makes:
+// RLIMIT_DATA
+// RLIMIT_RSS
+// RLIMIT_VMEM
+// RLIMIT_AS
+
+#define NO_MEM_LIMITS
+
+// The following lines will be changed by configure...
+#undef HAVE_SYS_RESOURCE_H
+#undef HAVE_UNISTD_H
+#undef HAVE_MEMLIMIT_DATA
+#undef HAVE_MEMLIMIT_RSS
+#undef HAVE_MEMLIMIT_VMEM
+#undef HAVE_MEMLIMIT_AS
+
+// ...and the results used here.
+#if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_UNISTD_H) && !defined(NO_MEM_LIMITS)
+
+#include <sys/resource.h>
+#include <unistd.h>
+
+#ifndef MEMLIMIT_MB
+#define MEMLIMIT_MB 16.0
+#endif
+
+void
+__set_testsuite_memlimit(float megs = MEMLIMIT_MB)
+{
+ struct rlimit r;
+ r.rlim_cur = (rlim_t)(megs * 1048576);
+
+ // heap size, seems to be common
+#if HAVE_MEMLIMIT_DATA
+ setrlimit (RLIMIT_DATA, &r);
+#endif
+
+ // resident set size -- Linux?
+#if HAVE_MEMLIMIT_RSS
+ setrlimit (RLIMIT_RSS, &r);
+#endif
+
+ // mapped memory (brk+mmap) -- Solaris?
+#if HAVE_MEMLIMIT_VMEM
+ setrlimit (RLIMIT_VMEM, &r);
+#endif
+
+ // virtual memory, seems to be common
+#if HAVE_MEMLIMIT_AS
+ setrlimit (RLIMIT_AS, &r);
+#endif
+}
+
+#else
+// The headers needed for resource limiting are not available. This is
+// safe, but means that no memory limits will be applied... ouch.
+#define __set_testsuite_memlimit(__junk)
+#endif
+
+
+
+
+#endif // _GLIBCPP_TESTSUITE_HOOKS_H
+