v / vlib / math / big / division_array_ops_test.v
71 lines · 60 sloc · 1.41 KB · 1820a5584b9bc606d0b5d12f6a60dfc62e98fe96
Raw
1module big
2
3import rand
4
5fn test_divide_digit_array_03() {
6 a := [u64(0), 4]
7 b := [u64(0), 1]
8 mut q := []u64{len: a.len - b.len + 1}
9 mut r := []u64{len: a.len}
10
11 divide_digit_array(a, b, mut q, mut r)
12 assert q == [u64(4)]
13 assert r == []u64{len: 0}
14}
15
16fn test_divide_digit_array_04() {
17 a := [u64(2), 4]
18 b := [u64(0), 1]
19 mut q := []u64{len: a.len - b.len + 1}
20 mut r := []u64{len: a.len}
21
22 divide_digit_array(a, b, mut q, mut r)
23 assert q == [u64(4)]
24 assert r == [u64(2)]
25}
26
27fn test_divide_digit_array_05() {
28 a := [u64(2), 4, 5]
29 b := [u64(0), 1]
30 mut q := []u64{len: a.len - b.len + 1}
31 mut r := []u64{len: a.len}
32
33 divide_digit_array(a, b, mut q, mut r)
34 assert q == [u64(4), 5]
35 assert r == [u64(2)]
36}
37
38fn test_divide_digit_array_06() {
39 a := [u64(2), 4, 5, 3]
40 b := [u64(0), 0x8000]
41 mut q := []u64{len: a.len - b.len + 1}
42 mut r := []u64{len: a.len}
43
44 divide_digit_array(a, b, mut q, mut r)
45 assert q == [u64(0xa000_00000000), 0x6000_00000000]
46 assert r == [u64(2), 4]
47}
48
49fn test_many_divisions() {
50 for _ in 0 .. 100 {
51 a := random_number(30)
52 b := random_number(30)
53 c := a * b
54 assert c / a == b
55 assert c / b == a
56 q, r := a.div_mod(b)
57 assert (q * b) + r == a
58 }
59}
60
61fn random_number(length int) Integer {
62 numbers := '0123456789'
63 mut stri := ''
64 for _ in 0 .. length {
65 i := rand.intn(10) or { 0 }
66 nr := numbers[i]
67 stri = stri + nr.ascii_str()
68 }
69 res := integer_from_string(stri) or { panic(err) }
70 return res
71}
72