@string-searching/specification
Version:
String searching specification for JavaScript
3 lines (2 loc) • 2.63 kB
JavaScript
class t{constructor(t,a,s){this.si=t,this.p=a,this.pi=s}}class a{constructor(t,a,s){this.s=t,this.i=a,this.j=s}}var s=[{string:"",patterns:[{pattern:"",hits:[0]},{pattern:"abcd",hits:[]}]},{string:"abcd",patterns:[{pattern:"",hits:[0,1,2,3,4]},{pattern:"a",hits:[0]},{pattern:"b",hits:[1]},{pattern:"c",hits:[2]},{pattern:"d",hits:[3]},{pattern:"abcde",hits:[]},{pattern:"abcd",hits:[0]},{pattern:"ab",hits:[0]},{pattern:"bc",hits:[1]},{pattern:"cd",hits:[2]},{pattern:"abc",hits:[0]},{pattern:"bcd",hits:[1]},{pattern:"dcba",hits:[]},{pattern:"xyz",hits:[]}]},{string:"abcdbdbc",patterns:[{pattern:"bc",hits:[1,6]}]},{string:"abcdbdbcazertyuiopqsdfghjklmwxcvbn",patterns:[{pattern:"bc",hits:[1,6]}]},{string:"Some books are to be tasted, others to be swallowed, and some few to be chewed and digested.",patterns:[{pattern:"to",hits:[15,36,66]}]},{string:"aaaaaaaaab",patterns:[{pattern:"aaaab",hits:[5]}]},{string:"aaaaaaaaaab",patterns:[{pattern:"aaa",hits:[0,1,2,3,4,5,6,7]}]},{string:"tototo",patterns:[{pattern:"to",hits:[0,2,4]}]},{string:"aaaa",patterns:[{pattern:"a",hits:[0,1,2,3]},{pattern:"aa",hits:[0,1,2]},{pattern:"aaa",hits:[0,1]},{pattern:"aaaa",hits:[0]}]},{string:"aaaaa",patterns:[{pattern:"aa",hits:[0,1,2,3]}]},{string:"xyyzxxyxzzzxyxyxxyzxyzxzxyxyzz",patterns:[{pattern:"xyz",hits:[16,19,26]},{pattern:"zz",hits:[8,9,28]},{pattern:"xyx",hits:[5,11,13,24]}]},{string:"ABC ABCDAB ABCDABCDABDE",patterns:[{pattern:"ABCDABD",hits:[15]}]},{string:"ABCABCDABABCDABCDABDE",patterns:[{pattern:"ABCDABD",hits:[13]},{pattern:"ABCDAB",hits:[3,9,13]},{pattern:"ABCABC",hits:[0]},{pattern:"ABC",hits:[0,3,9,13]},{pattern:"ABD",hits:[17]}]},{string:"babcbabcabcaabcabcabcacabc",patterns:[{pattern:"abcabcacab",hits:[15]}]}];function*n(a,s){const n=a.s.slice(a.i,a.j);for(const e of s){const s=e.s.slice(e.i,e.j);let i=0;for(;;){const r=n.indexOf(s,i);if(-1===r)break;if(yield new t(a.i+r,e,e.i),i>=n.length)break;i=r+1}}}var e=({test:t,algorithms:a,data:s,skipEmptyString:n,skipEmptyPattern:e})=>{for(const r of a)for(const{string:a,patterns:p}of s)if(""!==a||!n)for(const{pattern:s,hits:n}of p)""===s&&e||t(i,r,a,s,n)};const i=(t,a,s,n,e)=>{const i=a.name,r=s.length,p=n.length;let h=0;for(const c of a(s,0,r,n,0,p))h<e.length?(t.is(c,e[h],`${i} > begin of '${n}' in '${s}'`),++h):(++h,t.fail(`"${i} > (${c}) callback called ${h} times for '${n}' in '${s}'`));t.is(h,e.length,`${i} > check number of hits for '${n}' in '${s}'`)};i.title=(t,a,s,n,e)=>null!=t?t:`${a.name}('${s}', '${n}') hits ${JSON.stringify(e)}`;export{t as Hit,a as StringSlice,s as data,n as mock,e as single};
//# sourceMappingURL=index.modern.js.map