/*
 * This testing program makes sure the blkid_types header file
 *
 * Copyright (C) 2006 by Theodore Ts'o.
 *
 * %Begin-Header%
 * This file may be redistributed under the terms of the GNU Public
 * License.
 * %End-Header%
 */

#include <sys/types.h>
#include "blkid/blkid_types.h"

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv)
{
	if (sizeof(__u8) != 1) {
		printf("Sizeof(__u8) is %d should be 1\n",
		       (int)sizeof(__u8));
		exit(1);
	}
	if (sizeof(__s8) != 1) {
		printf("Sizeof(_s8) is %d should be 1\n",
		       (int)sizeof(__s8));
		exit(1);
	}
	if (sizeof(__u16) != 2) {
		printf("Sizeof(__u16) is %d should be 2\n",
		       (int)sizeof(__u16));
		exit(1);
	}
	if (sizeof(__s16) != 2) {
		printf("Sizeof(__s16) is %d should be 2\n",
		       (int)sizeof(__s16));
		exit(1);
	}
	if (sizeof(__u32) != 4) {
		printf("Sizeof(__u32) is %d should be 4\n",
		       (int)sizeof(__u32));
		exit(1);
	}
	if (sizeof(__s32) != 4) {
		printf("Sizeof(__s32) is %d should be 4\n",
		       (int)sizeof(__s32));
		exit(1);
	}
	if (sizeof(__u64) != 8) {
		printf("Sizeof(__u64) is %d should be 8\n",
		       (int)sizeof(__u64));
		exit(1);
	}
	if (sizeof(__s64) != 8) {
		printf("Sizeof(__s64) is %d should be 8\n",
		       (int)sizeof(__s64));
		exit(1);
	}
	printf("The blkid_types.h types are correct.\n");
	exit(0);
}

