| var tape = require('tape') | 
| var thunky = require('./') | 
|   | 
| tape('run only once', function (t) { | 
|   t.plan(3) | 
|   | 
|   var ran = 0 | 
|   var run = thunky(function (cb) { | 
|     ran++ | 
|     cb() | 
|   }) | 
|   | 
|   run(function () { | 
|     t.same(ran, 1, 'ran once') | 
|   }) | 
|   run(function () { | 
|     t.same(ran, 1, 'ran once') | 
|   }) | 
|   run(function () { | 
|     t.same(ran, 1, 'ran once') | 
|   }) | 
| }) | 
|   | 
| tape('run only once async', function (t) { | 
|   t.plan(3) | 
|   | 
|   var ran = 0 | 
|   var run = thunky(function (cb) { | 
|     process.nextTick(function () { | 
|       ran++ | 
|       cb() | 
|     }) | 
|   }) | 
|   | 
|   run(function () { | 
|     t.same(ran, 1, 'ran once') | 
|   }) | 
|   run(function () { | 
|     t.same(ran, 1, 'ran once') | 
|   }) | 
|   run(function () { | 
|     t.same(ran, 1, 'ran once') | 
|   }) | 
| }) | 
|   | 
| tape('re-run on error', function (t) { | 
|   t.plan(3) | 
|   | 
|   var ran = 0 | 
|   var run = thunky(function (cb) { | 
|     ran++ | 
|     cb(new Error('stop')) | 
|   }) | 
|   | 
|   run(function () { | 
|     t.same(ran, 1, 'ran once') | 
|     run(function () { | 
|       t.same(ran, 2, 'ran once') | 
|       run(function () { | 
|         t.same(ran, 3, 'ran once') | 
|       }) | 
|     }) | 
|   }) | 
| }) | 
|   | 
| tape('pass arguments', function (t) { | 
|   t.plan(6) | 
|   | 
|   var ran = 0 | 
|   var run = thunky(function (fn) { | 
|     ran++ | 
|     fn({ hello: 'world' }) | 
|   }) | 
|   | 
|   run(function (val) { | 
|     t.same(ran, 1, 'ran once') | 
|     t.same(val, { hello: 'world' }) | 
|     run(function (val) { | 
|       t.same(ran, 1, 'ran once') | 
|       t.same(val, { hello: 'world' }) | 
|       run(function (val) { | 
|         t.same(ran, 1, 'ran once') | 
|         t.same(val, { hello: 'world' }) | 
|       }) | 
|     }) | 
|   }) | 
| }) | 
|   | 
| tape('callback is optional', function (t) { | 
|   t.plan(2) | 
|   | 
|   var ran = 0 | 
|   var run = thunky(function (fn) { | 
|     ran++ | 
|     fn({ hello: 'world' }) | 
|   }) | 
|   | 
|   run() | 
|   run(function (val) { | 
|     t.same(ran, 1, 'ran once') | 
|     t.same(val, { hello: 'world' }) | 
|   }) | 
| }) | 
|   | 
| tape('always async', function (t) { | 
|   t.plan(2) | 
|   | 
|   var run = thunky(function (cb) { | 
|     process.nextTick(cb) | 
|   }) | 
|   | 
|   var sync = true | 
|   run(function () { | 
|     t.ok(!sync, 'not sync') | 
|     var innerSync = true | 
|     run(function () { | 
|       t.ok(!innerSync, 'not sync') | 
|     }) | 
|     innerSync = false | 
|   }) | 
|   sync = false | 
| }) |