diff --git a/index.js b/index.js index 8365bf7..0350c76 100644 --- a/index.js +++ b/index.js @@ -255,7 +255,8 @@ function mapNets(nets) { } export function merge(nets) { - nets = uniq((Array.isArray(nets) ? nets : [nets]).map(parse)); + // sort to workaround https://github.com/silverwind/cidr-tools/issues/17 + nets = uniq((Array.isArray(nets) ? nets : [nets]).sort(compare).map(parse)); const maps = mapNets(nets); const merged = {4: [], 6: []}; diff --git a/index.test.js b/index.test.js index e10703a..bddcd38 100644 --- a/index.test.js +++ b/index.test.js @@ -25,6 +25,9 @@ test("merge", () => { expect(merge(["0.0.1.0/24", "0.0.2.0/24", "0.0.3.0/24", "0.0.4.0/24"])).toEqual(["0.0.1.0/24", "0.0.2.0/23", "0.0.4.0/24"]); expect(merge(["0.0.175.0/24", "0.0.176.0/21", "0.0.184.0/21", "0.0.192.0/24"])).toEqual(["0.0.175.0/24", "0.0.176.0/20", "0.0.192.0/24"]); expect(merge(["0.0.176.0/21", "0.0.184.0/21", "0.0.192.0/24"])).toEqual(["0.0.176.0/20", "0.0.192.0/24"]); + expect(merge(["1:1:1:1::/128", "1:1:1:2::/128"])).toEqual(["1:1:1:1::/128", "1:1:1:2::/128"]); + expect(merge(["::2:0:0/128", "::1:0:0/128"])).toEqual(["::1:0:0/128", "::2:0:0/128"]); + expect(merge(["::2:0:0/128", "::1:0:0/128", "::2:0:1/128"])).toEqual(["::1:0:0/128", "::2:0:0/127"]); }); test("exclude", () => {