// $G $F.go && $L $F.$A && ./$A.out

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

func assert(cond bool, msg string) {
	if !cond {
		print("assertion fail: ", msg, "\n");
		panic(1);
	}
}

func main() {
	// bool
	var t bool = true;
	var f bool = false;
	assert(t == !f, "bool");

	// int8
	var i00 int8 = 0;
	var i01 int8 = 1;
	var i02 int8 = -1;
	var i03 int8 = 127;
	var i04 int8 = -127;
	var i05 int8 = -128;
	var i06 int8 = +127;
	assert(i01 == i00 + 1, "i01");
	assert(i02 == -i01, "i02");
	assert(i03 == -i04, "i03");
	assert(-(i05+1) == i06, "i05");

	// int16
	var i10 int16 = 0;
	var i11 int16 = 1;
	var i12 int16 = -1;
	var i13 int16 = 32767;
	var i14 int16 = -32767;
	var i15 int16 = -32768;
	var i16 int16 = +32767;
	assert(i11 == i10 + 1, "i11");
	assert(i12 == -i11, "i12");
	assert(i13 == -i14, "i13");
	assert(-(i15+1) == i16, "i15");

	// int32
	var i20 int32 = 0;
	var i21 int32 = 1;
	var i22 int32 = -1;
	var i23 int32 = 2147483647;
	var i24 int32 = -2147483647;
	var i25 int32 = -2147483648;
	var i26 int32 = +2147483647;
	assert(i21 == i20 + 1, "i21");
	assert(i22 == -i21, "i22");
	assert(i23 == -i24, "i23");
	assert(-(i25+1) == i26, "i25");
	assert(i23 == (1 << 31) - 1, "i23 size");

	// int64
	var i30 int64 = 0;
	var i31 int64 = 1;
	var i32 int64 = -1;
	var i33 int64 = 9223372036854775807;
	var i34 int64 = -9223372036854775807;
	var i35 int64 = -9223372036854775808;
	var i36 int64 = +9223372036854775807;
	assert(i31 == i30 + 1, "i31");
	assert(i32 == -i31, "i32");
	assert(i33 == -i34, "i33");
	assert(-(i35+1) == i36, "i35");
	assert(i33 == (1<<63) - 1, "i33 size");

	// uint8
	var u00 uint8 = 0;
	var u01 uint8 = 1;
	var u02 uint8 = 255;
	var u03 uint8 = +255;
	assert(u01 == u00 + 1, "u01");
	assert(u02 == u03, "u02");
	assert(u03 == (1<<8) - 1, "u03 size");

	// uint16
	var u10 uint16 = 0;
	var u11 uint16 = 1;
	var u12 uint16 = 65535;
	var u13 uint16 = +65535;
	assert(u11 == u10 + 1, "u11");
	assert(u12 == u13, "u12");

	// uint32
	var u20 uint32 = 0;
	var u21 uint32 = 1;
	var u22 uint32 = 4294967295;
	var u23 uint32 = +4294967295;
	assert(u21 == u20 + 1, "u21");
	assert(u22 == u23, "u22");

	// uint64
	var u30 uint64 = 0;
	var u31 uint64 = 1;
	var u32 uint64 = 18446744073709551615;
	var u33 uint64 = +18446744073709551615;

	// float
	var f00 float = 3.14159;
	var f01 float = -3.14159;
	var f02 float = +3.14159;
	var f03 float = 0.0;
	var f04 float = .0;
	var f05 float = 0.;
	var f06 float = -0.0;
	var f07 float = 1e10;
	var f08 float = -1e10;
	var f09 float = 1e-10;
	var f10 float = 1e+10;
	var f11 float = 1.e-10;
	var f12 float = 1.e+10;
	var f13 float = .1e-10;
	var f14 float = .1e+10;
	var f15 float = 1.1e-10;
	var f16 float = 1.1e+10;
	assert(f01 == -f00, "f01");
	assert(f02 == -f01, "f02");
	assert(f03 == f04, "f03");
	assert(f04 == f05, "f04");
	assert(f05 == f06, "f05");
	assert(f07 == -f08, "f07");
	assert(f09 == 1/f10, "f09");
	assert(f11 == f09, "f11");
	assert(f12 == f10, "f12");
	assert(f13 == f09/10.0, "f13");
	assert(f14 == f12/10.0, "f14");
	assert(f15 == f16/1e20, "f15");

	// character
	var c0 uint8 = 'a';
	var c1 uint8 = 'ä';
	var c2 uint8 = '\a';
	var c3 uint8 = '\b';
	var c4 uint8 = '\f';
	var c5 uint8 = '\n';
	var c6 uint8 = '\r';
	var c7 uint8 = '\t';
	var c8 uint8 = '\v';
	// var c9 uint8 = '本'; // correctly caught as error
	var c9 uint16 = '本';
	assert(c0 == 0x61, "c0");
	assert(c1 == 0xe4, "c1");
	assert(c2 == 0x07, "c2");
	assert(c3 == 0x08, "c3");
	assert(c4 == 0x0c, "c4");
	assert(c5 == 0x0a, "c4");
	assert(c6 == 0x0d, "c6");
	assert(c7 == 0x09, "c7");
	assert(c8 == 0x0b, "c8");
	assert(c9 == 0x672c, "c9");


	var c00 uint8 = '\000';
	var c01 uint8 = '\007';
	var c02 uint8 = '\177';
	var c03 uint8 = '\377';
	assert(c00 == 0, "c00");
	assert(c01 == 7, "c01");
	assert(c02 == 127, "c02");
	assert(c03 == 255, "c03");

	var cx0 uint8 = '\x00';
	var cx1 uint8 = '\x0f';
	var cx2 uint8 = '\xff';
	assert(cx0 == 0, "cx0");
	assert(cx1 == 15, "cx1");
	assert(cx2 == 255, "cx2");

	var cu0 uint16 = '\u1234';
	var cu1 uint32 = '\U00101234';
	assert(cu0 == 0x1234, "cu0");
	assert(cu1 == 0x101234, "cu1");

	// string
	var s0 string = "";
	var s1 string = "hellô";
	assert(s1[0] == 'h', "s1-0");
	assert(s1[4] == 0xc3, "s1-4");
	assert(s1[5] == 0xb4, "s1-5");
	var s2 string = "\a\b\f\n\r\t\v";

	var s00 string = "\000";
	var s01 string = "\007";
	var s02 string = "\377";
	assert(s00[0] == 0, "s00");
	assert(s01[0] == 7, "s01");
	assert(s02[0] == 255, "s02");

	var x00 string = "\x00";
	var x01 string = "\x0f";
	var x02 string = "\xff";
	assert(x00[0] == 0, "x00");
	assert(x01[0] == 15, "x01");
	assert(x02[0] == 255, "x02");

	// these are all the same string
	var sj0 string = "日本語";
	var sj1 string = "\u65e5\u672c\u8a9e";
	var sj2 string = "\U000065e5\U0000672c\U00008a9e";
	var sj3 string = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e";
	assert(sj0 == sj1, "sj1");
	assert(sj0 == sj2, "sj2");
	assert(sj0 == sj3, "sj3");
}
