1548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/** \file test-integers.c
2548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \brief Check assumptions about integer types (sizes, ranges).
3548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen *
4548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * Copyright (C) 2007 Hans Ulrich Niedermann <gp@n-dimensional.de>
5548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen *
6548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * This library is free software; you can redistribute it and/or
7548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * modify it under the terms of the GNU Lesser General Public
8548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * License as published by the Free Software Foundation; either
9548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * version 2 of the License, or (at your option) any later version.
10548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen *
11548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * This library is distributed in the hope that it will be useful,
12548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * but WITHOUT ANY WARRANTY; without even the implied warranty of
13548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * Lesser General Public License for more details.
15548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen *
16548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * You should have received a copy of the GNU Lesser General Public
17548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * License along with this library; if not, write to the
18548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * Boston, MA  02110-1301  USA.
20548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen */
21548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
22548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
23548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#include "libexif/_stdint.h"
24548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#include <stdlib.h>
25548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#include <stdio.h>
26548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
27548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
28548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissentypedef enum {
29548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen   EN_A,
30548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen   EN_B,
31548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen   EN_C,
32548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen   EN_D,
33548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen   EN_E,
34548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen   EN_F
35548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen} enum_t;
36548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
37548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
38548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#if defined(__GNUC__) && (__GNUC__ >= 4)
39548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen# define CHECK(condition)					     \
40548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	if (!(condition)) {					     \
41548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen		fprintf(stderr, "%s:%d: check failed: %s\n",	     \
42548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen			__FILE__, __LINE__, #condition);	     \
43548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen		errors++;					     \
44548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	}
45548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#else
46548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen# define CHECK(condition)					     \
47548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	if (!(condition)) {					     \
48548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen		abort();					     \
49548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	}
50548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#endif
51548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
52548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
53548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissenint main()
54548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen{
55548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen  unsigned int errors = 0;
56548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
57548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen  /* libexif assumes unsigned ints are not smaller than 32bit in many places */
58548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen  CHECK(sizeof(unsigned int) >= sizeof(uint32_t));
59548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
60548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen  /* libexif assumes that enums fit into ints */
61548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen  CHECK(sizeof(enum_t) <= sizeof(int));
62548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
63548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen  return (errors>0)?1:0;
64548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen}
65