@comparison-sorting/specification
Version:
Comparison sorting specification for JavaScript
1 lines • 5 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../src/increasing.js","../src/test.js","../src/decreasing.js","../src/mock.js"],"sourcesContent":["import {increasing as _increasing} from '@total-order/primitive';\n\nconst increasing = (a, b) => _increasing(a, b);\nexport default increasing;\n","import {isSorted} from '@comparison-sorting/is-sorted';\nimport {shuffle} from '@randomized/random';\nimport {sorted} from '@iterable-iterator/sorted';\nimport {range} from '@iterable-iterator/range';\nimport {exhaust} from '@iterable-iterator/consume';\nimport {list} from '@iterable-iterator/list';\nimport {map} from '@iterable-iterator/map';\nimport {_chain as chain} from '@iterable-iterator/chain';\nimport {product} from '@set-theory/cartesian-product';\nimport {star} from '@functional-abstraction/functools';\nimport increasing from './increasing.js';\nimport decreasing from './decreasing.js';\n\nconst set = (A) => sorted(increasing, A);\n\nconst macro = (t, _sortname, method, Ctor, n, compare) => {\n\t// SETUP ARRAY\n\tconst data = set(range(n));\n\tconst a = Ctor.from(data);\n\n\t// SORT ARRAY\n\tshuffle(a, 0, n);\n\tmethod(compare, a, 0, n);\n\n\t// TEST PREDICATE\n\tt.is(n, a.length, 'check length');\n\tt.is(undefined, a[-1], 'check left boundary');\n\tt.is(undefined, a[n], 'check right boundary');\n\tt.true(isSorted(compare, a, 0, n), 'check sorted');\n\tt.deepEqual(data, set(a), 'check data');\n};\n\nmacro.title = (title, sortname, _, Ctor, n, compare) =>\n\ttitle ?? `${sortname} (new ${Ctor.name}(${n}), ${compare.name})`;\n\nconst DEFAULT_COMPARE_FUNCTIONS = [increasing, decreasing];\n\nconst DEFAULT_LENGTH_VALUES = [0, 1, 2, 10, 63, 64, 65];\n\nconst DEFAULT_ARRAY_TYPES = [\n\tArray,\n\tInt8Array,\n\tUint8Array,\n\tInt16Array,\n\tUint16Array,\n\tInt32Array,\n\tUint32Array,\n\tFloat32Array,\n\tFloat64Array,\n];\n\nconst DEFAULT_OPTIONS = {\n\tcompare: DEFAULT_COMPARE_FUNCTIONS,\n\tlength: DEFAULT_LENGTH_VALUES,\n\tarray: DEFAULT_ARRAY_TYPES,\n};\n\nconst wrap = (l) => map((x) => [x], l[Symbol.iterator] === undefined ? [l] : l);\n\nexport function test(_test, algorithms, options) {\n\toptions = Object.assign({}, DEFAULT_OPTIONS, options);\n\texhaust(\n\t\tmap(\n\t\t\t(args) => {\n\t\t\t\tstar((sortname, sort, compare, size, type) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttype.BYTES_PER_ELEMENT &&\n\t\t\t\t\t\tsize > 2 ** (type.BYTES_PER_ELEMENT * 8)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t_test(macro, sortname, sort, type, size, compare);\n\t\t\t\t}, list(chain(args)));\n\t\t\t},\n\n\t\t\tproduct(\n\t\t\t\t[\n\t\t\t\t\talgorithms,\n\t\t\t\t\twrap(options.compare),\n\t\t\t\t\twrap(options.length),\n\t\t\t\t\twrap(options.array),\n\t\t\t\t],\n\t\t\t\t1,\n\t\t\t),\n\t\t),\n\t);\n}\n","import {decreasing as _decreasing} from '@total-order/primitive';\n\nconst decreasing = (a, b) => _decreasing(a, b);\nexport default decreasing;\n","import {copy} from '@array-like/copy';\n\nexport function mock(compare, a, i, j) {\n\tconst x = Array.prototype.slice.call(a, i, j);\n\tx.sort(compare);\n\tcopy(x, 0, j - i, a, i);\n}\n"],"names":["a","b","_increasing","set","A","sorted","increasing","macro","t","_sortname","method","Ctor","n","compare","data","range","from","shuffle","is","length","undefined","true","isSorted","deepEqual","title","sortname","_","name","DEFAULT_OPTIONS","_decreasing","array","Array","Int8Array","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","wrap","l","map","x","Symbol","iterator","i","j","prototype","slice","call","sort","copy","_test","algorithms","options","Object","assign","exhaust","args","star","size","type","BYTES_PER_ELEMENT","list","chain","product"],"mappings":"idAEmB,SAACA,EAAGC,UAAMC,aAAYF,EAAGC,ICWtCE,EAAM,SAACC,UAAMC,SAAOC,EAAYF,IAEhCG,EAAQ,SAACC,EAAGC,EAAWC,EAAQC,EAAMC,EAAGC,GAE7C,IAAMC,EAAOX,EAAIY,QAAMH,IACjBZ,EAAIW,EAAKK,KAAKF,GAGpBG,UAAQjB,EAAG,EAAGY,GACdF,EAAOG,EAASb,EAAG,EAAGY,GAGtBJ,EAAEU,GAAGN,EAAGZ,EAAEmB,OAAQ,gBAClBX,EAAEU,QAAGE,EAAWpB,GAAG,GAAI,uBACvBQ,EAAEU,QAAGE,EAAWpB,EAAEY,GAAI,wBACtBJ,EAAEa,KAAKC,WAAST,EAASb,EAAG,EAAGY,GAAI,gBACnCJ,EAAEe,UAAUT,EAAMX,EAAIH,GAAI,eAG3BO,EAAMiB,MAAQ,SAACA,EAAOC,EAAUC,EAAGf,EAAMC,EAAGC,gBAC3CW,EAAAA,EAAYC,WAAiBd,EAAKgB,SAAQf,QAAOC,EAAQc,UAE1D,IAgBMC,EAAkB,CACvBf,QAjBiC,CAACP,ECjChB,SAACN,EAAGC,UAAM4B,aAAY7B,EAAGC,KDmD3CkB,OAhB6B,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,IAiBnDW,MAf2B,CAC3BC,MACAC,UACAC,WACAC,WACAC,YACAC,WACAC,YACAC,aACAC,eASKC,EAAO,SAACC,UAAMC,MAAI,SAACC,SAAM,CAACA,SAA2BvB,IAAvBqB,EAAEG,OAAOC,UAA0B,CAACJ,GAAKA,0BEvDxD5B,EAASb,EAAG8C,EAAGC,GACnC,IAAMJ,EAAIZ,MAAMiB,UAAUC,MAAMC,KAAKlD,EAAG8C,EAAGC,GAC3CJ,EAAEQ,KAAKtC,GACPuC,OAAKT,EAAG,EAAGI,EAAID,EAAG9C,EAAG8C,0BFsDDO,EAAOC,EAAYC,GACvCA,EAAUC,OAAOC,OAAO,GAAI7B,EAAiB2B,GAC7CG,UACChB,MACC,SAACiB,GACAC,OAAK,SAACnC,EAAU0B,EAAMtC,EAASgD,EAAMC,GAEnCA,EAAKC,mBACLF,WAAO,EAA+B,EAAzBC,EAAKC,oBAKnBV,EAAM9C,EAAOkB,EAAU0B,EAAMW,EAAMD,EAAMhD,IACvCmD,OAAKC,SAAMN,MAGfO,UACC,CACCZ,EACAd,EAAKe,EAAQ1C,SACb2B,EAAKe,EAAQpC,QACbqB,EAAKe,EAAQzB,QAEd"}