blob: 528afdd2341ce53e6412fb889f5c16091cabb9c8 [file] [log] [blame]
Robert Griesemerdb3bf9c2009-08-14 11:53:27 -07001// Copyright 2009 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package big
6
7import "testing"
8
9
Robert Griesemere5874222009-08-15 11:43:54 -070010func newZ(x int64) *Int {
11 var z Int;
12 return z.New(x);
Robert Griesemerdb3bf9c2009-08-14 11:53:27 -070013}
14
15
Robert Griesemere5874222009-08-15 11:43:54 -070016type funZZ func(z, x, y *Int) *Int
17type argZZ struct { z, x, y *Int }
Robert Griesemerdb3bf9c2009-08-14 11:53:27 -070018
19var sumZZ = []argZZ{
20 argZZ{newZ(0), newZ(0), newZ(0)},
21 argZZ{newZ(1), newZ(1), newZ(0)},
22 argZZ{newZ(1111111110), newZ(123456789), newZ(987654321)},
23 argZZ{newZ(-1), newZ(-1), newZ(0)},
24 argZZ{newZ(864197532), newZ(-123456789), newZ(987654321)},
25 argZZ{newZ(-1111111110), newZ(-123456789), newZ(-987654321)},
26}
27
28
29func TestSetZ(t *testing.T) {
30 for _, a := range sumZZ {
Robert Griesemere5874222009-08-15 11:43:54 -070031 var z Int;
32 z.Set(a.z);
33 if CmpInt(&z, a.z) != 0 {
Robert Griesemerdb3bf9c2009-08-14 11:53:27 -070034 t.Errorf("got z = %v; want %v", z, a.z);
35 }
36 }
37}
38
39
40func testFunZZ(t *testing.T, msg string, f funZZ, a argZZ) {
Robert Griesemere5874222009-08-15 11:43:54 -070041 var z Int;
42 f(&z, a.x, a.y);
43 if CmpInt(&z, a.z) != 0 {
44 t.Errorf("%s%+v\n\tgot z = %v; want %v", msg, a, &z, a.z);
Robert Griesemerdb3bf9c2009-08-14 11:53:27 -070045 }
46}
47
48
49func TestFunZZ(t *testing.T) {
Robert Griesemere5874222009-08-15 11:43:54 -070050 AddZZ := func(z, x, y *Int) *Int { return z.Add(x, y) };
51 SubZZ := func(z, x, y *Int) *Int { return z.Sub(x, y) };
Robert Griesemerdb3bf9c2009-08-14 11:53:27 -070052 for _, a := range sumZZ {
53 arg := a;
54 testFunZZ(t, "AddZZ", AddZZ, arg);
55
56 arg = argZZ{a.z, a.y, a.x};
57 testFunZZ(t, "AddZZ symmetric", AddZZ, arg);
58
59 arg = argZZ{a.x, a.z, a.y};
60 testFunZZ(t, "SubZZ", SubZZ, arg);
61
62 arg = argZZ{a.y, a.z, a.x};
63 testFunZZ(t, "SubZZ symmetric", SubZZ, arg);
64 }
65}