-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.js
110 lines (104 loc) Β· 3.11 KB
/
test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
const infinistack = require(".");
const assert = require("assert");
///////////////////////////////////////////////////////////////////////
console.log("π Begin tests");
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
// Factorial
const factorial = infinistack(N => {
if (N == 0) {
return 1;
}
return N * factorial(N - 1);
});
// This works !
// console.log(factorial(180000));
assert(factorial(180000) === Infinity);
console.log("β
Simple");
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
// Fibonacci
function fibDumb(N) {
if (N < 2) {
return 1;
} else {
return (fibDumb(N - 2) + fibDumb(N - 1)) % 1000000007;
}
}
// Don't do this, it will crash !
// console.log(fibDumb(100000));
///////////////////////////////////////////////////////////////////////
// Infinite fibonaci
let fibStack;
function fibSmart(N) {
if (N < 2) {
return 1;
} else {
return (fibStack(N - 2) + fibStack(N - 1)) % 1000000007;
}
}
fibStack = infinistack(fibSmart);
// This works !
// console.log(fibStack(100000));
assert(fibStack(100000) === 967618232);
console.log("β
Fibonacci");
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
// Ackermann
function ackermannDumb(M, N) {
if (M == 0) {
return N + 1;
}
if (N == 0) {
return ackermannDumb(M - 1, 1);
}
return ackermannDumb(M - 1, ackermannDumb(M, N - 1));
}
// Don't do this, it will crash !
// console.log(ackermannDumb(3, 11));
///////////////////////////////////////////////////////////////////////
// Infinite ackermann
let ackermannStack;
function ackermannSmart(M, N) {
if (M == 0) {
return N + 1;
}
if (N == 0) {
return ackermannStack(M - 1, 1);
}
return ackermannStack(M - 1, ackermannStack(M, N - 1));
}
ackermannStack = infinistack(ackermannSmart);
// This works !
// console.log(ackermannStack(3, 11));
assert(ackermannStack(3, 11) === 16381);
console.log("β
Ackermann");
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
// Factorial
function factorialDumb(N) {
if (N == 0) {
return 1;
}
return N * factorialDumb(N - 1);
}
// Don't do this, it will crash !
// console.log(factorialDumb(180000));
///////////////////////////////////////////////////////////////////////
// Infinite factorial
let factorialStack;
function factorialSmart(N) {
if (N == 0) {
return 1;
}
return N * factorialStack(N - 1);
}
factorialStack = infinistack(factorialSmart);
// This works !
// console.log(factorialStack(180000));
assert(factorialStack(180000) === Infinity);
console.log("β
Factorial");
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
console.log("π All tests successful !");
///////////////////////////////////////////////////////////////////////