UNPKG

assertthat

Version:
45 lines (44 loc) 1.86 kB
"use strict"; 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;