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