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);
+	}
+}