// -*- C++ -*-
// Testing allocator for the C++ library testsuite.
//
// Copyright (C) 2002, 2003 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.

#include <iostream>
#include <testsuite_allocator.h>

namespace __gnu_test
{
  allocation_tracker::size_type allocation_tracker::allocationTotal_   = 0;
  allocation_tracker::size_type allocation_tracker::deallocationTotal_ = 0;
  int allocation_tracker::constructCount_    = 0;
  int allocation_tracker::destructCount_     = 0;

  bool
  check_construct_destroy(const char* tag, int expected_c, int expected_d)
  {
    if (allocation_tracker::constructCount() == expected_c &&
	allocation_tracker::destructCount() == expected_d)
      return true;

    else {
      std::cerr << tag << ": "
		<< " construct = " << allocation_tracker::constructCount()
		<< " (should be " << expected_c << "),"
		<< " destroy = " << allocation_tracker::destructCount()
		<< " (should be " << expected_d << ")"
		<< std::endl;
      return false;
    }
  }

}; // namespace __cxx_test

