From: TheDevil on
Hello,

See comments for details.

// *** Begin of Main.CPP

#include <stdio.h>

typedef char int8;
typedef short int int16;
typedef int int32;
typedef long long int64;

typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned int uint32;
typedef unsigned long long uint64;

/*

13 april 2008

Back to School:

Lesson 4, Integer Assignments, Unsigned to Signed with Mixed Sizes.

Conclusions:

BAD: 2 spectacular range detection failures for int32.
BAD: 2 spectacular range detection failures for int64.
BAD: 1 range detection failure for int8.
BAD: 1 range detection failure for int16.

Platform tested intel architecture 32.

40 out of 48 tests passed.
2 out of 48 tests doubtfull, but passed.
6 out of 48 tests failed.

Score:

8.75 out of 10

*/

int main()
{
printf("Program Started \n\n");

int8 vMinInt8;
int8 vMaxInt8;

uint8 vMinUint8;
uint8 vMaxUint8;

int16 vMinInt16;
int16 vMaxInt16;

uint16 vMinUint16;
uint16 vMaxUint16;

int32 vMinInt32;
int32 vMaxInt32;

uint32 vMinUint32;
uint32 vMaxUint32;

int64 vMinInt64;
int64 vMaxInt64;

uint64 vMinUint64;
uint64 vMaxUint64;

int8 vInt8;
uint8 vUint8;

int16 vInt16;
uint16 vUint16;

int32 vInt32;
uint32 vUint32;

int64 vInt64;
uint64 vUint64;

// setup min and max for int8
vMinInt8 = -128;
vMaxInt8 = 127;

// setup min and max for uint8
vMinUint8 = 0;
vMaxUint8 = 255;

// setup min and max for int16
vMinInt16 = -32768;
vMaxInt16 = 32767;

// setup min and max for uint16
vMinUint16 = 0;
vMaxUint16 = 65535;

// setup min and max for int32
vMinInt32 = 2147483648; // same as -2147483648, solves warning, <-
weakness in language.
vMaxInt32 = 2147483647;

// setup min and max for uint32
vMinUint32 = 0;
vMaxUint32 = 4294967295;

// setup min and max for int64
vMinInt64 = 9223372036854775808; // same as -9223372036854775808, solves
warning, <- weakness in language
vMaxInt64 = 9223372036854775807; // 9223372036854775808 would give no
warning ?!?!, BAD

// test min and max for uint64
vMinUint64 = 0;
vMaxUint64 = 18446744073709551615;

// signed 8 bit = unsigned variable bit

// TEST1
// vInt8 = vMinUint8; // no warning, OK
// // result: 0, OK

// TEST2
// vInt8 = 200; // warning: truncation of constant value, OK

// TEST3
// vInt8 = vMaxUint8; // no warning, BAD
// result: -1, OK

// TEST4
// vInt8 = vMinUint16; // warning: conversion from 'uint16' to 'int8',
possible loss of data, OK
// result: 0, OK

// TEST5
// vInt8 = 50000; // warning: truncation from 'int' to 'int8', OK
// warning: truncation of constant value, OK

// TEST6
// vInt8 = vMaxUint16; // warning: conversion from 'uint16' to 'int8',
possible loss of data, OK
// result: -1, OK

// TEST 7
// vInt8 = vMinUint32; // warning: conversion from 'uint32' to 'int8',
possible loss of data, OK
// result: 0, OK

// TEST 8
// vInt8 = 3000000000; // warning: truncation from 'unsigned long' to
'int8', OK, INTERESTING
// warning: truncation of constant value, OK

// TEST 9
// vInt8 = vMaxUint32; // warning: conversion from 'uint32' to 'int8',
possible loss of data, OK
// result: -1, OK

// TEST 10
// vInt8 = vMinUint64; // warning: conversion from 'uint64' to 'int8',
possible loss of data, OK
// result: 0, OK

// TEST 11
// vInt8 = 12345678901234567890; // warning: truncation from 'unsigned
__int64' to 'int8', OK, INTERESTING
// warning: truncation of constant value,
OK

// TEST 12
// vInt8 = vMaxUint64; // warning: conversion from 'uint64' to 'int8',
possible loss of data, OK
// result: -1, OK

// printf("vInt8: %d \n", vInt8 );

// signed 16 bit = unsigned variable bit

// TEST 13
// vInt16 = vMinUint8; // no warning, OK
// result: 0, OK

// TEST 14
// vInt16 = 200; // no warning, OK

// TEST 15
// vInt16 = vMaxUint8; // no warning, OK
// result: 255, OK

// TEST 16
// vInt16 = vMinUint16; // no warning, OK
// result: 0, OK

// TEST 17
// vInt16 = 50000; // warning: truncation of constant value

// TEST 18
// vInt16 = vMaxUint16; // no warning, BAD
// result: -1, OK

// TEST 19
// vInt16 = vMinUint32; // warning: conversion from 'uint32' to 'int16',
possible loss of data, OK
// result: 0, OK

// TEST 20
// vInt16 = 3000000000; // warning: truncation from 'unsigned long' to
'int16', OK
// warning: truncation of constant value, OK

// TEST 21
// vInt16 = vMaxUint32; // warning: conversion from 'uint32' to 'int16',
possible loss of data, OK
// result: -1, OK

// TEST 22
// vInt16 = vMinUint64; // warning: conversion from 'uint64' to 'int16',
possible loss of data, OK
// result: 0, OK

// TEST 23
// vInt16 = 12345678901234567890; // warning: truncation from 'unsigned
__int64' to 'int16', OK
// warning: truncation of constant value

// TEST 24
// vInt16 = vMaxUint64; // warning: conversion from 'uint64' to 'int16',
possible loss of data, OK
// result: -1, OK

// printf("vInt16: %d \n", vInt16 );

// signed 32 bit = unsigned variable bit

// TEST 25
// vInt32 = vMinUint8; // no warning: OK
// result: 0, OK

// TEST 26
// vInt32 = 200; // no warning, OK

// TEST 27
// vInt32 = vMaxUint8; // no warning, OK
// result: 255, OK

// TEST 28
// vInt32 = vMinUint16; // no warning, OK
// result: 0, OK

// TEST 29
// vInt32 = 50000; // no warning, OK

// TEST 30
// vInt32 = vMaxUint16; // no warning, OK
// result: 65535, OK

// TEST 31
// vInt32 = vMinUint32; // no warning, DOUBTFULLL, BUT OK.

// TEST 32
// vInt32 = 3000000000; // no warning, VERY BAD, SPECTACULAR FAILURE
// result: -1294967296, OK

// TEST 33
// vInt32 = vMaxUint32; // no warning, VERY BAD, SPECTACULAR FAILURE
// result: -1, OK

// TEST 34
// vInt32 = vMinUint64; // warning: conversion from 'uint64' to 'int32',
possible loss of data, OK
// result: 0, OK

// TEST 35
// vInt32 = 12345678901234567890; // warning: truncation from 'unsigned
__int64' to 'int32', OK
// warning: truncation of constant value,
OK

// TEST 36
// vInt32 = vMaxUint64; // warning: conversion from 'uint64' to 'int32',
possible loss of data, OK
// result: -1, OK

// printf("vInt32: %d \n", vInt32 );

// signed 64 bit = unsigned variable bit

// TEST 37
// vInt64 = vMinUint8; // no warning, OK
// result: 0, OK

// TEST 38
// vInt64 = 200; // no warning, OK

// TEST 39
// vInt64 = vMaxUint8; // no warning, OK
// result: 255, OK

// TEST 40
// vInt64 = vMinUint16; // no warning, OK
// result: 0, OK

// TEST 41
// vInt64 = 50000; // no warning, OK

// TEST 42
// vInt64 = vMaxUint16; // no warning, OK
// result: 65535, OK

// TEST 43
// vInt64 = vMinUint32; // no warning, OK
// result: 0, OK

// TEST 44
// vInt64 = 3000000000; // no warning, OK
// result: 3000000000, OK, SLIGHTY INTERESTING

// TEST 45
// vInt64 = vMaxUint32; // no warning, OK
// result: 4294967295, OK

// TEST 46
// vInt64 = vMinUint64; // no warning, DOUBTFULL, BUT OK
// result: 0, OK

// TEST 47
// vInt64 = 12345678901234567890; // no warning, VERY BAD, SPECTACULAR
FAILURE
// result: -6101065172474983726, OK

// TEST 48
vInt64 = vMaxUint64; // no warning, VERY BAD, SPECTACULAR FAILURE
// result: -1, OK

printf("vInt64: %lld \n", vInt64 );

printf("Program finished \n");
}

// *** End of Main.cpp ***

Bye,
The Devil.