summaryrefslogtreecommitdiff
path: root/mocha_test/reduce.js
diff options
context:
space:
mode:
Diffstat (limited to 'mocha_test/reduce.js')
-rw-r--r--mocha_test/reduce.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/mocha_test/reduce.js b/mocha_test/reduce.js
new file mode 100644
index 0000000..f5dce59
--- /dev/null
+++ b/mocha_test/reduce.js
@@ -0,0 +1,66 @@
+var async = require('../lib');
+var expect = require('chai').expect;
+var assert = require('assert');
+
+describe('reduce', function() {
+
+ it('reduce', function(done) {
+ var call_order = [];
+ async.reduce([1,2,3], 0, function(a, x, callback){
+ call_order.push(x);
+ callback(null, a + x);
+ }, function(err, result){
+ assert(err === null, err + " passed instead of 'null'");
+ expect(result).to.equal(6);
+ expect(call_order).to.eql([1,2,3]);
+ done();
+ });
+ });
+
+ it('reduce async with non-reference memo', function(done) {
+ async.reduce([1,3,2], 0, function(a, x, callback){
+ setTimeout(function(){callback(null, a + x);}, Math.random()*100);
+ }, function(err, result){
+ expect(result).to.equal(6);
+ done();
+ });
+ });
+
+ it('reduce error', function(done) {
+ async.reduce([1,2,3], 0, function(a, x, callback){
+ callback('error');
+ }, function(err){
+ expect(err).to.equal('error');
+ });
+ setTimeout(done, 50);
+ });
+
+ it('inject alias', function(done) {
+ expect(async.inject).to.equal(async.reduce);
+ done();
+ });
+
+ it('foldl alias', function(done) {
+ expect(async.foldl).to.equal(async.reduce);
+ done();
+ });
+
+ it('reduceRight', function(done) {
+ var call_order = [];
+ var a = [1,2,3];
+ async.reduceRight(a, 0, function(a, x, callback){
+ call_order.push(x);
+ callback(null, a + x);
+ }, function(err, result){
+ expect(result).to.equal(6);
+ expect(call_order).to.eql([3,2,1]);
+ expect(a).to.eql([1,2,3]);
+ done();
+ });
+ });
+
+ it('foldr alias', function(done) {
+ expect(async.foldr).to.equal(async.reduceRight);
+ done();
+ });
+});