assertthat
Version:
assertthat provides fluent TDD.
45 lines (44 loc) • 1.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.compareMaps = void 0;
const compare_1 = require("../typeAware/compare");
const size_1 = require("../../size/typeAware/size");
const EqualDiff_1 = require("../../diffs/EqualDiff");
const MapDiff_1 = require("../../diffs/forMaps/MapDiff");
const compareMaps = function (actual, expected) {
const newDiff = (0, MapDiff_1.mapDiff)({
cost: 0,
additions: new Map(),
omissions: new Map(),
changes: new Map(),
equal: new Map()
});
for (const [actualKey, actualElement] of actual.entries()) {
newDiff.additions.set(actualKey, actualElement);
newDiff.cost += (0, size_1.size)(actualElement);
}
for (const [expectedKey, expectedElement] of expected.entries()) {
const actualKeyInBothMaps = [...newDiff.additions.keys()].find((actualKey) => (0, compare_1.compare)(actualKey, expectedKey).cost === 0);
if (actualKeyInBothMaps !== undefined) {
newDiff.additions.delete(actualKeyInBothMaps);
newDiff.cost -= (0, size_1.size)(actual.get(actualKeyInBothMaps));
const subDiff = (0, compare_1.compare)(actual.get(actualKeyInBothMaps), expectedElement);
if ((0, EqualDiff_1.isEqualDiff)(subDiff)) {
newDiff.equal.set(actualKeyInBothMaps, expectedElement);
}
else {
newDiff.changes.set(actualKeyInBothMaps, subDiff);
newDiff.cost += subDiff.cost;
}
}
else {
newDiff.omissions.set(expectedKey, expectedElement);
newDiff.cost += (0, size_1.size)(expectedElement);
}
}
if (newDiff.cost === 0) {
return (0, EqualDiff_1.equalDiff)({ value: actual });
}
return newDiff;
};
exports.compareMaps = compareMaps;