// SpaFEDTe, a Template based C++ library for creating 
// Discontinuous Finite Element Spaces,
// Copyright (C) 2012 Lorenzo Alessio Botti

/* This library is free software; you can redistribute it and/or */
/* modify it under the terms of the GNU Lesser General Public */ 
/* License as published by the Free Software Foundation either */ 
/* version 3.0 of the License, or (at your option) any later version. */

/* This software 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 */
/* Lesser General Public License for more details. */

/* You should have received a copy of the GNU Lesser General Public */
/* License along with this software; if not, a copy of the full */
/* GNU Lesser General Public License can be found at */
/* http://www.gnu.org/licenses/ */

#ifndef __debug_h__
#define __debug_h__

#include <cassert>
#include <cstdio>

#define FATAL(a)                                                        \
  { fprintf(stderr, "Fatal error at %s: %s\n", __PRETTY_FUNCTION__,  a); \
    exit(1);                                                            \
  }

#ifdef DEBUG
#  define ASSERT(a) assert(a)
#else
#  define ASSERT(a)
#endif

#ifdef DEBUG
#  define VERBOSE_ASSERT(a,...)                                         \
  if(not(a)) {								\
    fprintf(stderr, "Assertion %s failed: %s\n", #a, __VA_ARGS__);	\
    assert(a);								\
  }
#else
#  define VERBOSE_ASSERT(a,...)
#endif

#endif
