forked from ramda/ramda
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathonce.js
39 lines (33 loc) · 962 Bytes
/
once.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
var R = require('../source/index.js');
var eq = require('./shared/eq.js');
describe('once', function() {
it('returns a function that calls the supplied function only the first time called', function() {
var ctr = 0;
var fn = R.once(function() {ctr += 1;});
fn();
eq(ctr, 1);
fn();
eq(ctr, 1);
fn();
eq(ctr, 1);
});
it('passes along arguments supplied', function() {
var fn = R.once(function(a, b) {return a + b;});
var result = fn(5, 10);
eq(result, 15);
});
it('retains and returns the first value calculated, even if different arguments are passed later', function() {
var ctr = 0;
var fn = R.once(function(a, b) {ctr += 1; return a + b;});
var result = fn(5, 10);
eq(result, 15);
eq(ctr, 1);
result = fn(20, 30);
eq(result, 15);
eq(ctr, 1);
});
it('retains arity', function() {
var f = R.once(function(a, b) { return a + b; });
eq(f.length, 2);
});
});