First cut at a more realistic multi-precision package:
- implemented low-level operations on word vectors
- implemented corresponding amd64 assembly routines for word vector operations
- implemented first set of operations on unsigned integers
- implemented first set of operations on signed integers
- implemented systematic test cases for each data type
R=rsc
DELTA=1330 (1330 added, 0 deleted, 0 changed)
OCL=33132
CL=33285
diff --git a/src/pkg/big/bigZ_test.go b/src/pkg/big/bigZ_test.go
new file mode 100644
index 0000000..ed6f4ff
--- /dev/null
+++ b/src/pkg/big/bigZ_test.go
@@ -0,0 +1,63 @@
+// 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 big
+
+import "testing"
+
+
+func newZ(x int64) Z {
+ var z Z;
+ return NewZ(z, x);
+}
+
+
+type funZZ func(z, x, y Z) Z
+type argZZ struct { z, x, y Z }
+
+var sumZZ = []argZZ{
+ argZZ{newZ(0), newZ(0), newZ(0)},
+ argZZ{newZ(1), newZ(1), newZ(0)},
+ argZZ{newZ(1111111110), newZ(123456789), newZ(987654321)},
+ argZZ{newZ(-1), newZ(-1), newZ(0)},
+ argZZ{newZ(864197532), newZ(-123456789), newZ(987654321)},
+ argZZ{newZ(-1111111110), newZ(-123456789), newZ(-987654321)},
+}
+
+
+func TestSetZ(t *testing.T) {
+ for _, a := range sumZZ {
+ var z Z;
+ z = SetZ(z, a.z);
+ if CmpZZ(z, a.z) != 0 {
+ t.Errorf("got z = %v; want %v", z, a.z);
+ }
+ }
+}
+
+
+func testFunZZ(t *testing.T, msg string, f funZZ, a argZZ) {
+ var z Z;
+ z = f(z, a.x, a.y);
+ if CmpZZ(z, a.z) != 0 {
+ t.Errorf("%s%+v\n\tgot z = %v; want %v", msg, a, z, a.z);
+ }
+}
+
+
+func TestFunZZ(t *testing.T) {
+ for _, a := range sumZZ {
+ arg := a;
+ testFunZZ(t, "AddZZ", AddZZ, arg);
+
+ arg = argZZ{a.z, a.y, a.x};
+ testFunZZ(t, "AddZZ symmetric", AddZZ, arg);
+
+ arg = argZZ{a.x, a.z, a.y};
+ testFunZZ(t, "SubZZ", SubZZ, arg);
+
+ arg = argZZ{a.y, a.z, a.x};
+ testFunZZ(t, "SubZZ symmetric", SubZZ, arg);
+ }
+}