// Copyright (c) Vitaliy Filippov, 2019+ // License: VNPL-1.1 (see README.md for details) const LPOptimizer = require('./lp-optimizer.js'); const osd_tree = { 100: { 110: { 111: 1, 112: 1 }, 120: { 121: 1, 122: 1 } }, 200: { 210: { 211: 1, 212: 1 }, 220: { 221: 1, 222: 1 } }, 300: { 310: { 311: 1, 312: 1 }, 320: { 321: 1, 322: 1 } }, 400: { 410: { 411: 1, 412: 1 }, 420: { 421: 1, 422: 1 } }, 500: { 510: { 511: 1, 512: 1 }, 520: { 521: 1, 522: 1 } }, }; const osd_tree2 = { 100: { 111: 1, 112: 1, 121: 1, 122: 1 }, 200: { 211: 1, 212: 1, 221: 1, 222: 1 }, 300: { 311: 1, 312: 1, 321: 1, 322: 1 }, 400: { 411: 1, 412: 1, 421: 1, 422: 1 }, 500: { 511: 1, 512: 1, 521: 1, 522: 1 }, }; const osd_tree3 = { 100: { 111: 1, 112: 1, 121: 1, 122: 1 }, 200: { 211: 1, 212: 1, 221: 1, 222: 1 }, 300: { 311: 1, 312: 1, 321: 1, 322: 1 }, 400: { 411: 1, 412: 1, 421: 1, 422: 1 }, 500: { 511: 1 }, }; async function run() { let r; console.log(r = LPOptimizer.random_hier_combinations(osd_tree, [ 3, 2, 1 ], 10000, false, true)); console.log(r = LPOptimizer.random_hier_combinations(osd_tree2, [ 3, 2 ], 0, false, true)); // Will contain 'Z': console.log(r = LPOptimizer.random_combinations(osd_tree2, 6, 0, true)); console.log(r = LPOptimizer.extract_tree_levels( { level: 'dc', children: [ { level: 'rack', children: [ { level: 'host', children: [ { level: 'osd', id: 'OSD5', size: 10 }, ] }, ] }, { level: 'osd', id: 'OSD10', size: 10 }, ] }, [ 'rack', 'osd' ], { dc: 1, rack: 2, host: 3, osd: 4 } )); if (JSON.stringify(r) != '{"rack1":{"OSD5":10},"rack2":{"OSD10":10}}') throw new Error('extract_tree_levels failed'); // should not contain Z: console.log(r = LPOptimizer.random_hier_combinations(osd_tree3, [ 3, 2 ], 0, false, true)); console.log('OK'); } run().catch(console.error);