summaryrefslogtreecommitdiff
path: root/test/intcvt.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-05-29 09:17:35 -0700
committerRuss Cox <rsc@golang.org>2009-05-29 09:17:35 -0700
commit5d1d8a825839a422eb8f58b87f8d562e318dcc75 (patch)
treead4a4846efcb7bdf309325097a7e7135cba3c138 /test/intcvt.go
parent6e1762c06e40d0bc3bb4b6787c72843bf897cf11 (diff)
downloadgo-git-5d1d8a825839a422eb8f58b87f8d562e318dcc75.tar.gz
integer conversions and test.
R=ken OCL=29577 CL=29589
Diffstat (limited to 'test/intcvt.go')
-rw-r--r--test/intcvt.go140
1 files changed, 140 insertions, 0 deletions
diff --git a/test/intcvt.go b/test/intcvt.go
new file mode 100644
index 0000000000..a108cffa1b
--- /dev/null
+++ b/test/intcvt.go
@@ -0,0 +1,140 @@
+// $G $D/$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
+
+const (
+ ci8 = -1<<7;
+ ci16 = -1<<15 + 100;
+ ci32 = -1<<31 + 100000;
+ ci64 = -1<<63 + 10000000001;
+
+ cu8 = 1<<8 - 1;
+ cu16 = 1<<16 - 1234;
+ cu32 = 1<<32 - 1234567;
+ cu64 = 1<<64 - 1234567890123;
+
+ cf32 = 1e8 + 0.5;
+ cf64 = -1e8 + 0.5;
+)
+
+var (
+ i8 int8 = ci8;
+ i16 int16 = ci16;
+ i32 int32 = ci32;
+ i64 int64 = ci64;
+
+ u8 uint8 = cu8;
+ u16 uint16 = cu16;
+ u32 uint32 = cu32;
+ u64 uint64 = cu64;
+
+// f32 float32 = 1e8 + 0.5;
+// f64 float64 = -1e8 + 0.5;
+)
+
+func chki8(i, v int8) { if i != v { panicln(i, "!=", v) } }
+func chki16(i, v int16) { if i != v { panicln(i, "!=", v) } }
+func chki32(i, v int32) { if i != v { panicln(i, "!=", v) } }
+func chki64(i, v int64) { if i != v { panicln(i, "!=", v) } }
+func chku8(i, v uint8) { if i != v { panicln(i, "!=", v) } }
+func chku16(i, v uint16) { if i != v { panicln(i, "!=", v) } }
+func chku32(i, v uint32) { if i != v { panicln(i, "!=", v) } }
+func chku64(i, v uint64) { if i != v { panicln(i, "!=", v) } }
+//func chkf32(f, v float32) { if f != v { panicln(f, "!=", v) } }
+//func chkf64(f, v float64) { if f != v { panicln(f, "!=", v) } }
+
+func main()
+{
+ chki8(int8(i8), ci8 & 0xff - 1<<8);
+ chki8(int8(i16), ci16 & 0xff);
+ chki8(int8(i32), ci32 & 0xff - 1<<8);
+ chki8(int8(i64), ci64 & 0xff);
+ chki8(int8(u8), cu8 & 0xff - 1<<8);
+ chki8(int8(u16), cu16 & 0xff);
+ chki8(int8(u32), cu32 & 0xff);
+ chki8(int8(u64), cu64 & 0xff);
+// chki8(int8(f32), 0);
+// chki8(int8(f64), 0);
+
+ chki16(int16(i8), ci8 & 0xffff - 1<<16);
+ chki16(int16(i16), ci16 & 0xffff - 1<<16);
+ chki16(int16(i32), ci32 & 0xffff - 1<<16);
+ chki16(int16(i64), ci64 & 0xffff - 1<<16);
+ chki16(int16(u8), cu8 & 0xffff);
+ chki16(int16(u16), cu16 & 0xffff - 1<<16);
+ chki16(int16(u32), cu32 & 0xffff);
+ chki16(int16(u64), cu64 & 0xffff - 1<<16);
+// chki16(int16(f32), 0);
+// chki16(int16(f64), 0);
+
+ chki32(int32(i8), ci8 & 0xffffffff - 1<<32);
+ chki32(int32(i16), ci16 & 0xffffffff - 1<<32);
+ chki32(int32(i32), ci32 & 0xffffffff - 1<<32);
+ chki32(int32(i64), ci64 & 0xffffffff);
+ chki32(int32(u8), cu8 & 0xffffffff);
+ chki32(int32(u16), cu16 & 0xffffffff);
+ chki32(int32(u32), cu32 & 0xffffffff - 1<<32);
+ chki32(int32(u64), cu64 & 0xffffffff - 1<<32);
+// chki32(int32(f32), 0);
+// chki32(int32(f64), 0);
+
+ chki64(int64(i8), ci8 & 0xffffffffffffffff - 1<<64);
+ chki64(int64(i16), ci16 & 0xffffffffffffffff - 1<<64);
+ chki64(int64(i32), ci32 & 0xffffffffffffffff - 1<<64);
+ chki64(int64(i64), ci64 & 0xffffffffffffffff - 1<<64);
+ chki64(int64(u8), cu8 & 0xffffffffffffffff);
+ chki64(int64(u16), cu16 & 0xffffffffffffffff);
+ chki64(int64(u32), cu32 & 0xffffffffffffffff);
+ chki64(int64(u64), cu64 & 0xffffffffffffffff - 1<<64);
+// chki64(int64(f32), 0);
+// chki64(int64(f64), 0);
+
+
+ chku8(uint8(i8), ci8 & 0xff);
+ chku8(uint8(i16), ci16 & 0xff);
+ chku8(uint8(i32), ci32 & 0xff);
+ chku8(uint8(i64), ci64 & 0xff);
+ chku8(uint8(u8), cu8 & 0xff);
+ chku8(uint8(u16), cu16 & 0xff);
+ chku8(uint8(u32), cu32 & 0xff);
+ chku8(uint8(u64), cu64 & 0xff);
+// chku8(uint8(f32), 0);
+// chku8(uint8(f64), 0);
+
+ chku16(uint16(i8), ci8 & 0xffff);
+ chku16(uint16(i16), ci16 & 0xffff);
+ chku16(uint16(i32), ci32 & 0xffff);
+ chku16(uint16(i64), ci64 & 0xffff);
+ chku16(uint16(u8), cu8 & 0xffff);
+ chku16(uint16(u16), cu16 & 0xffff);
+ chku16(uint16(u32), cu32 & 0xffff);
+ chku16(uint16(u64), cu64 & 0xffff);
+// chku16(uint16(f32), 0);
+// chku16(uint16(f64), 0);
+
+ chku32(uint32(i8), ci8 & 0xffffffff);
+ chku32(uint32(i16), ci16 & 0xffffffff);
+ chku32(uint32(i32), ci32 & 0xffffffff);
+ chku32(uint32(i64), ci64 & 0xffffffff);
+ chku32(uint32(u8), cu8 & 0xffffffff);
+ chku32(uint32(u16), cu16 & 0xffffffff);
+ chku32(uint32(u32), cu32 & 0xffffffff);
+ chku32(uint32(u64), cu64 & 0xffffffff);
+// chku32(uint32(f32), 0);
+// chku32(uint32(f64), 0);
+
+ chku64(uint64(i8), ci8 & 0xffffffffffffffff);
+ chku64(uint64(i16), ci16 & 0xffffffffffffffff);
+ chku64(uint64(i32), ci32 & 0xffffffffffffffff);
+ chku64(uint64(i64), ci64 & 0xffffffffffffffff);
+ chku64(uint64(u8), cu8 & 0xffffffffffffffff);
+ chku64(uint64(u16), cu16 & 0xffffffffffffffff);
+ chku64(uint64(u32), cu32 & 0xffffffffffffffff);
+ chku64(uint64(u64), cu64 & 0xffffffffffffffff);
+// chku64(uint64(f32), 0);
+// chku64(uint64(f64), 0);
+}