// $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");
}
