Skip to content

Commit

Permalink
Merge pull request #20 from fedeghe/fix-reduce
Browse files Browse the repository at this point in the history
Fix reduce
  • Loading branch information
fedeghe committed Mar 6, 2023
2 parents ba61eb5 + f512230 commit bc323ba
Show file tree
Hide file tree
Showing 23 changed files with 297 additions and 182 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -703,6 +703,6 @@ console.log(ow.uniqBy([

---

last modified : 22/1/2023
last modified : 6/3/2023

༺ ᚗᚌ ༻
6 changes: 3 additions & 3 deletions dist/index.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "objwun",
"version": "1.1.21",
"version": "1.1.22",
"main": "dist/index.js",
"author": "fedeghe <fedeghe@gmail.com>",
"license": "MIT",
Expand Down Expand Up @@ -39,7 +39,7 @@
},
"scripts": {
"build": "malta source/build.json",
"buildev": "malta source/build_dev.json",
"dev": "malta source/build_dev.json",
"test": "mocha",
"lint": "eslint source",
"cover": "nyc npm test && nyc report --reporter=html",
Expand Down
2 changes: 1 addition & 1 deletion source/methods/reduce.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ function reduce(o, fn, initial, esc) {
var what = core.mustBe.objOrArr(o);
core.mustBe.func(fn);
esc && core.mustBe.func(esc);
var res = initial || (what.isObj ? {} : []);
var res = core.in.isDef(initial) ? initial : (what.isObj ? {} : []);

function _reduce(arr, fn, init, exitFn) {
var acc = init,
Expand Down
9 changes: 9 additions & 0 deletions source/test/reduce.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@ describe('reduce', () => {
c: 3, d: 4
},
a = [1, 2, 3, 4];

it('should behave like a basic summer', () => {
var sum = ow.reduce(o,
(acc, el) => {
return acc + el
}, 0
);
assert.strictEqual(sum, 1 + 2 + 3 + 4);
});

it('should behave like a filter on object', () => {
var even = ow.reduce(o,
Expand Down
16 changes: 12 additions & 4 deletions test/assign.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,39 @@ var assert = require('assert'),
ow = require('../dist');

describe('assign', () => {

it('should return an empty object', () => {
assert.strictEqual(JSON.stringify(ow.assign()), '{}');
});

it('should return the passed arguments', () => {
assert.strictEqual(
JSON.stringify(ow.assign({a: 1}, {b: 2})),
JSON.stringify({a: 1, b: 2})
);
});

it('should ignore empty objs', () => {
assert.strictEqual(
JSON.stringify(ow.assign({a: 1}, {b: 2}, {}, {}, {c: 3}, {}, {d: 4})),
JSON.stringify({a: 1, b: 2, c: 3, d: 4})
);
});

it('should override on the way', () => {
assert.strictEqual(
JSON.stringify(ow.assign({a: 1}, {b: 2}, {}, {b:5}, {a:6})),
JSON.stringify({a: 6, b: 5})
);
});

it('should override on the way deeper', () => {
assert.strictEqual(
JSON.stringify(ow.assign({a: 1}, {b: 2}, {}, {b:5}, {a:6}, {a:7}, {b:3, s:5})),
JSON.stringify({a: 7, b: 3, s:5})
);
});

it('should override in one', () => {
assert.strictEqual(
JSON.stringify(ow.assign(
Expand All @@ -43,17 +49,18 @@ describe('assign', () => {
JSON.stringify({a: 0, b: 3, s:5})
);
});

it('should avoid upper properties', () => {
function Person() {}
var me = new Person()
var me = new Person();
Person.prototype.type = 'human';

assert.strictEqual(JSON.stringify(ow.assign(me, {})), JSON.stringify({}));
});

it('should avoid upper prototype (counterproof) properties', () => {
function Person(n) {this.name = n}
var me = new Person('Federico')
function Person(n) {this.name = n;}
var me = new Person('Federico');
Person.prototype.type = 'human';

assert.strictEqual(JSON.stringify(ow.assign(me, {})), JSON.stringify({name: 'Federico'}));
Expand All @@ -68,12 +75,13 @@ describe('assign', () => {
JSON.stringify(out),
JSON.stringify({a: 7, b: 3, s:{s: {s: 5}}})
);
out.s.s.s = 'modified'
out.s.s.s = 'modified';
assert.strictEqual(
JSON.stringify(inp),
JSON.stringify([{a: {a: {a: {a: {a:1}}}}}, {b: 2}, {}, {b:5}, {a:6}, {a:7}, {b:3, s:{s: {s: 5}}}])
)
});

it('should throw an exception', () => {
try {
ow.assign({}, [1,2,3]);
Expand Down
8 changes: 6 additions & 2 deletions test/clone.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ var assert = require('assert'),
ow = require('../dist');

describe('clone', () => {

it('should return the same empty', () => {
assert.strictEqual(JSON.stringify(ow.clone({})), '{}');
assert.strictEqual(JSON.stringify(ow.clone([])), '[]');
});

it('should return the same obj, different ref', () => {
const o = {
a: {
Expand All @@ -19,21 +21,23 @@ describe('clone', () => {
},
clone = ow.clone(o);
assert.strictEqual(JSON.stringify(clone), JSON.stringify(o));
o.a = 1
o.a = 1;
assert.strictEqual(clone.a.b.c.d, 1);
assert.strictEqual(o.a, 1);
});

it('should return functions', () => {
const o = {
a: e => e ** 2
},
clone = ow.clone(o);
assert.strictEqual(o.a(3), clone.a(3));
// check ref
o.a = 1
o.a = 1;
assert.strictEqual(typeof clone.a, 'function');
assert.strictEqual(o.a, 1);
});

it('should throw an exception', () => {
const o = 1;
try {
Expand Down
68 changes: 34 additions & 34 deletions test/core.mustBe.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
var assert = require('assert'),
ow = require('../dist');


describe('core.mustBe', () => {

const benchsBase = {
Expand All @@ -14,21 +13,22 @@ describe('core.mustBe', () => {
"null": null,
"boolean": true,
"symbol": Symbol()
}
};

describe ('arr', () => {

it('positive cases', () => {
assert.strictEqual(ow.core.mustBe.arr([]), true);
assert.strictEqual(ow.core.mustBe.arr([{}, 1, false]), true);
assert.strictEqual(ow.core.mustBe.arr(new Array()), true);
assert.strictEqual(ow.core.mustBe.arr(Array.from({length: 0})), true);
});
const benchs = { ... benchsBase}
delete benchs.arr
const benchs = { ... benchsBase};
delete benchs.arr;
Object.keys(benchs).forEach(bench => {
it(`countercase ${bench}`, () => {
try {
ow.core.mustBe.arr(benchs[bench])
ow.core.mustBe.arr(benchs[bench]);
} catch (e) {
assert.strictEqual(e instanceof Error, true);
assert.strictEqual(e.message, ow.core.errors.INVALID_ARGUMENT_ARRAY_EXPECTED);
Expand All @@ -41,15 +41,15 @@ describe('core.mustBe', () => {
describe ('defined', () => {
it('negative case', () => {
try {
ow.core.mustBe.defined()
ow.core.mustBe.defined();
} catch (e) {
assert.strictEqual(e instanceof Error, true);
assert.strictEqual(e.message, ow.core.errors.MISSING_EXPECTED_ARGUMENT);
}
});

const benchs = { ... benchsBase}
delete benchs.undefined
delete benchs.undefined;
Object.keys(benchs).forEach(bench => {
it(`positive ${bench}`, () => {
assert.strictEqual(ow.core.mustBe.defined(benchs[bench]), true);
Expand All @@ -62,12 +62,12 @@ describe('core.mustBe', () => {
it('positive cases', () => {
assert.strictEqual(ow.core.mustBe.func(() => {}), true);
});
const benchs = { ... benchsBase}
delete benchs.func
const benchs = { ... benchsBase};
delete benchs.func;
Object.keys(benchs).forEach(bench => {
it(`countercase ${bench}`, () => {
try {
ow.core.mustBe.func(benchs[bench])
ow.core.mustBe.func(benchs[bench]);
} catch (e) {
assert.strictEqual(e instanceof Error, true);
assert.strictEqual(e.message, ow.core.errors.INVALID_ARGUMENT_FUNCTION_EXPECTED);
Expand All @@ -82,13 +82,13 @@ describe('core.mustBe', () => {
assert.deepStrictEqual(ow.core.mustBe.funcOrStr(() => {}), {isFunc: true, isStr: false});
assert.deepStrictEqual(ow.core.mustBe.funcOrStr(""), {isFunc: false, isStr: true});
});
const benchs = { ... benchsBase}
delete benchs.function
delete benchs.string
const benchs = { ... benchsBase};
delete benchs.function;
delete benchs.string;
Object.keys(benchs).forEach(bench => {
it(`countercase ${bench}`, () => {
try {
ow.core.mustBe.funcOrStr(benchs[bench])
ow.core.mustBe.funcOrStr(benchs[bench]);
} catch (e) {
assert.strictEqual(e instanceof Error, true);
assert.strictEqual(e.message, ow.core.errors.INVALID_ARGUMENT_STRING_OR_FUNCTION_EXPECTED);
Expand All @@ -102,13 +102,13 @@ describe('core.mustBe', () => {
assert.deepStrictEqual(ow.core.mustBe.funcOrArr(() => {}), {isFunc: true, isArr: false});
assert.deepStrictEqual(ow.core.mustBe.funcOrArr([]), {isFunc: false, isArr: true});
});
const benchs = { ... benchsBase}
delete benchs.function
delete benchs.arr
const benchs = { ... benchsBase};
delete benchs.function;
delete benchs.arr;
Object.keys(benchs).forEach(bench => {
it(`countercase ${bench}`, () => {
try {
ow.core.mustBe.funcOrArr(benchs[bench])
ow.core.mustBe.funcOrArr(benchs[bench]);
} catch (e) {
assert.strictEqual(e instanceof Error, true);
assert.strictEqual(e.message, ow.core.errors.INVALID_ARGUMENT_ARRAY_OR_FUNCTION_EXPECTED);
Expand All @@ -123,13 +123,13 @@ describe('core.mustBe', () => {
assert.strictEqual(ow.core.mustBe.bool(false), true);
});

const benchs = { ... benchsBase}
delete benchs.bool
const benchs = { ... benchsBase};
delete benchs.bool;

Object.keys(benchs).forEach(bench => {
it(`countercase ${bench}`, () => {
try {
ow.core.mustBe.bool(benchs[bench])
ow.core.mustBe.bool(benchs[bench]);
} catch (e) {
assert.strictEqual(e instanceof Error, true);
assert.strictEqual(e.message, ow.core.errors.INVALID_ARGUMENT_BOOLEAN_EXPECTED);
Expand All @@ -142,12 +142,12 @@ describe('core.mustBe', () => {
it('positive cases', () => {
assert.strictEqual(ow.core.mustBe.num(122), true);
});
const benchs = { ... benchsBase}
delete benchs.num
const benchs = { ... benchsBase};
delete benchs.num;
Object.keys(benchs).forEach(bench => {
it(`countercase ${bench}`, () => {
try {
ow.core.mustBe.num(benchs[bench])
ow.core.mustBe.num(benchs[bench]);
} catch (e) {
assert.strictEqual(e instanceof Error, true);
assert.strictEqual(e.message, ow.core.errors.INVALID_ARGUMENT_INTEGER_EXPECTED);
Expand All @@ -161,12 +161,12 @@ describe('core.mustBe', () => {
it('positive cases', () => {
assert.strictEqual(ow.core.mustBe.obj({}), true);
});
const benchs = { ... benchsBase}
delete benchs.obj
const benchs = { ... benchsBase};
delete benchs.obj;
Object.keys(benchs).forEach(bench => {
it(`countercase ${bench}`, () => {
try {
ow.core.mustBe.obj(benchs[bench])
ow.core.mustBe.obj(benchs[bench]);
} catch (e) {
assert.strictEqual(e instanceof Error, true);
assert.strictEqual(e.message, ow.core.errors.INVALID_ARGUMENT_OBJECT_EXPECTED);
Expand All @@ -181,13 +181,13 @@ describe('core.mustBe', () => {
assert.deepStrictEqual(ow.core.mustBe.objOrArr({}), {isObj: true, isArr: false});
assert.deepStrictEqual(ow.core.mustBe.objOrArr([]), {isObj: false, isArr: true});
});
const benchs = { ... benchsBase}
delete benchs.obj
delete benchs.arr
const benchs = { ... benchsBase};
delete benchs.obj;
delete benchs.arr;
Object.keys(benchs).forEach(bench => {
it(`countercase ${bench}`, () => {
try {
ow.core.mustBe.objOrArr(benchs[bench])
ow.core.mustBe.objOrArr(benchs[bench]);
} catch (e) {
assert.strictEqual(e instanceof Error, true);
assert.strictEqual(e.message, ow.core.errors.INVALID_ARGUMENT_OBJECT_OR_ARRAY_EXPECTED);
Expand All @@ -202,12 +202,12 @@ describe('core.mustBe', () => {
assert.strictEqual(ow.core.mustBe.str(""), true);
assert.strictEqual(ow.core.mustBe.str({}.toString()), true);
});
const benchs = { ... benchsBase}
delete benchs.string
const benchs = { ... benchsBase};
delete benchs.string;
Object.keys(benchs).forEach(bench => {
it(`countercase ${bench}`, () => {
try {
ow.core.mustBe.str(benchs[bench])
ow.core.mustBe.str(benchs[bench]);
} catch (e) {
assert.strictEqual(e instanceof Error, true);
assert.strictEqual(e.message, ow.core.errors.INVALID_ARGUMENT_STRING_EXPECTED);
Expand Down
Loading

0 comments on commit bc323ba

Please sign in to comment.