source: Dev/branches/rest-dojo-ui/client/dojox/lang/tests/recomb.js @ 256

Last change on this file since 256 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

File size: 3.5 KB
Line 
1dojo.provide("dojox.lang.tests.recomb");
2
3dojo.require("dojox.lang.functional");
4dojo.require("dojox.lang.functional.listcomp");
5
6dojo.require("dojox.lang.functional.linrec");
7dojo.require("dojox.lang.functional.numrec");
8dojo.require("dojox.lang.functional.tailrec");
9dojo.require("dojox.lang.functional.binrec");
10dojo.require("dojox.lang.functional.multirec");
11
12(function(){
13        var df = dojox.lang.functional,
14               
15                // define the standard factorial function to compare with
16                fact = function(n){ return n <= 1 ? 1 : n * fact(n - 1); },
17
18                // define the standard fibonacci function to compare with
19                fib  = function(n){ return n <= 1 ? 1 : fib(n - 1) + fib(n - 2); },
20               
21                // prepare the sequence of arguments for comparison
22                seq = df.listcomp("i for(i = 0; i < 15; ++i)"),
23               
24                // build a set of results for our argument list using the standard factorial function
25                factTable = df.map(seq, fact),
26
27                // build a set of results for our argument list using the standard fibonacci function
28                fibTable  = df.map(seq, fib);
29       
30        tests.register("dojox.lang.tests.recomb", [
31                function testFactLinrec1(t){
32                        var fact = df.linrec("<= 1", "1", "[n - 1]", "a * b[0]");
33                        t.assertEqual(df.map(seq, fact), factTable);
34                },
35                function testFactLinrec2(t){
36                        var fact = df.linrec(df.lambda("<= 1"), df.lambda("1"), df.lambda("[n - 1]"), df.lambda("a * b[0]"));
37                        t.assertEqual(df.map(seq, fact), factTable);
38                },
39                function testFactNumrec1(t){
40                        var fact = df.numrec(1, "*");
41                        t.assertEqual(df.map(seq, fact), factTable);
42                },
43                function testFactNumrec2(t){
44                        var fact = df.numrec(1, df.lambda("*"));
45                        t.assertEqual(df.map(seq, fact), factTable);
46                },
47                function testFactMultirec1(t){
48                        var fact = df.multirec("<= 1", "1", "[[n - 1]]", "a[0] * b[0]");
49                        t.assertEqual(df.map(seq, fact), factTable);
50                },
51                function testFactMultirec2(t){
52                        var fact = df.multirec(df.lambda("<= 1"), df.lambda("1"), df.lambda("[[n - 1]]"), df.lambda("a[0] * b[0]"));
53                        t.assertEqual(df.map(seq, fact), factTable);
54                },
55                function testFactTailrec1(t){
56                        var fact2 = df.tailrec("<= 1", "n, acc -> acc", "[n - 1, n * acc]"),
57                                fact  = function(n){ return fact2(n, 1); };
58                        t.assertEqual(df.map(seq, fact), factTable);
59                },
60                function testFactTailrec2(t){
61                        var fact2 = df.tailrec(df.lambda("<= 1"), df.lambda("n, acc -> acc"), df.lambda("[n - 1, n * acc]")),
62                                fact  = function(n){ return fact2(n, 1); };
63                        t.assertEqual(df.map(seq, fact), factTable);
64                },
65                function testFibBinrec1(t){
66                        var fib = df.binrec("<= 1", "1", "[[n - 1], [n - 2]]", "+");
67                        t.assertEqual(df.map(seq, fib), fibTable);
68                },
69                function testFibBinrec2(t){
70                        var fib = df.binrec(df.lambda("<= 1"), df.lambda("1"), df.lambda("[[n - 1], [n - 2]]"), df.lambda("+"));
71                        t.assertEqual(df.map(seq, fib), fibTable);
72                },
73                function testFibTailrec1(t){
74                        var fib2 = df.tailrec("<= 0", "n, next, result -> result", "[n - 1, next + result, next]"),
75                                fib  = function(n){ return fib2(n, 1, 1); };
76                        t.assertEqual(df.map(seq, fib), fibTable);
77                },
78                function testFibTailrec2(t){
79                        var fib2 = df.tailrec(df.lambda("<= 0"), df.lambda("n, next, result -> result"), df.lambda("[n - 1, next + result, next]")),
80                                fib  = function(n){ return fib2(n, 1, 1); };
81                        t.assertEqual(df.map(seq, fib), fibTable);
82                },
83                function testFibMultirec1(t){
84                        var fib = df.multirec("<= 1", "1", "[[n - 1], [n - 2]]", "a[0] + a[1]");
85                        t.assertEqual(df.map(seq, fib), fibTable);
86                },
87                function testFibMultirec2(t){
88                        var fib = df.multirec(df.lambda("<= 1"), df.lambda("1"), df.lambda("[[n - 1], [n - 2]]"), df.lambda("a[0] + a[1]"));
89                        t.assertEqual(df.map(seq, fib), fibTable);
90                }
91        ]);
92})();
Note: See TracBrowser for help on using the repository browser.