on d760cbf help sign in
51 lines 1.6 kB history raw
1/*
2^- @ux
3%- jam
4=> [2 2]
5!=
6=- (ack +< +>)
7=> %kack
8~% %kack ~ ~
9|%
10++ dec
11 ~/ %dec
12 |= a=@
13 =| i=@
14 |-
15 =+ n=+(i)
16 ?: =(n a)
17 i
18 $(i n)
19++ ack
20 ~/ %ack
21 |= [m=@ n=@]
22 ?~ m +(n)
23 ?~ n $(m (dec m), n 1)
24 $(m (dec m), n $(n (dec n)))
25--
26*/
27var compiler = require('../compiler.js'),
28 serial = require('../serial.js'),
29 noun = require('../noun.js'),
30 bits = require('../bits.js'),
31 test = require('tape'),
32 n = noun.dwim,
33 pill = noun.Atom.fromString("6eca1c00a1bac286c86483dc21dc324164dbf18777e361a371d5186b441bf187fe30f5b1b0bc071d5186b441bf1870028700287bb287d612eb0a1b21920e2aa1b26ce8a1af7086c8648384a86bdc21b21920c00a1e6364278c2598964324180143986482c9abdc21b21920b47a87df8db85d87484cc2e109efc6dc2ec38b4e2c9afc37e30ef8971b2b23c071e8e6c2cdf0168837e30f2643241f213dc21b9421b21920f1097ea13225b85d876266164dc5937bf1b26e2d8b26bf0b8b26eb63616bf818bf0b041", 16),
34 formula = serial.cue(pill),
35 context = new compiler.Context();
37var getSample = noun.Noun.fragmenter(n(6)),
38 jetCalled = false;
39function decJet(core) {
40 jetCalled = true;
41 return bits.dec(getSample(core));
44test("nock ackermann function", function(t) {
45 t.plan(3);
46 t.equal(context.nock(n(2,2), formula).valueOf(), 7, "unjetted 2,2");
47 context = new compiler.Context(["kack", null, [["dec", decJet]]]);
48 formula = serial.cue(pill); // old formula will remember there is no jet for dec
49 t.equal(context.nock(n(3,9), formula).valueOf(), 4093, "jetted 3,9");
50 t.ok(jetCalled, 'jet was called');
51});