From fefb0204a1bdcc87344f404da2871a87f73f9415 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ooms=20Aur=C3=A9lien?= Date: Sat, 28 Jun 2014 01:48:38 +0200 Subject: [PATCH] fixes and cmp + recover coverage --- bower.json | 2 +- js/dist/alu.js | 477 +++++++++++++++++++++++++++++++++++++++-- js/dist/alu.js.map | 2 +- js/dist/alu.min.js | 3 +- package.json | 4 +- test/js/run.js | 8 +- test/js/src/and/raw.js | 6 +- test/js/src/cmp.js | 91 +++++++- test/js/src/div.js | 10 +- 9 files changed, 569 insertions(+), 34 deletions(-) diff --git a/bower.json b/bower.json index 8b52c4a..33c8419 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "alu", - "version": "0.0.1", + "version": "0.0.2", "description" : "natural numbers algorithm templates for JavaScript", "homepage": "https://github.com/aureooms/alu", "license": "GPL v2" diff --git a/js/dist/alu.js b/js/dist/alu.js index 8ce7140..300eafe 100644 --- a/js/dist/alu.js +++ b/js/dist/alu.js @@ -3,8 +3,13 @@ 'use strict'; -/* /home/genius/alu/js/src/add */ -/* /home/genius/alu/js/src/add/add.js */ +/* /home/genius/Bureau/alu/js/src/abs */ +/* /home/genius/Bureau/alu/js/src/abs/abs.js */ +/** + * COMPUTE THE ABSOLUTE VALUE OF NUMBER n + */ +/* /home/genius/Bureau/alu/js/src/add */ +/* /home/genius/Bureau/alu/js/src/add/add.js */ /** * @param r base (radix) @@ -102,8 +107,362 @@ var ladd_t = function(r){ exports.badd_t = badd_t; exports.ladd_t = ladd_t; -/* /home/genius/alu/js/src/mul */ -/* /home/genius/alu/js/src/mul/karatsuba.js */ +/* /home/genius/Bureau/alu/js/src/and */ +/* /home/genius/Bureau/alu/js/src/and/and.js */ + +/** + * + * BINARY and APPLIED ON a AND b + * + * Meaningful only when r is a power of 2. + * + * |a| = |b| = |c| > 0 + * + * + */ + +var and = function (a, a0, b, b0, c, c0, c1) { + + while (c0 < c1) c[c0++] = a[a0++] & b[b0++]; + +}; + + +/** + * BIG ENDIAN BINARY and APPLIED ON a AND b + * + * Meaningful only when r is a power of 2. + * + * |a| >= |b| > 0 + * + * treats b as if it was represented with the same number of blocks as a + */ + +var band_t = function(r){ + + var _r = r / 2; + + return function (a, a0, a1, b, b0, b1, c, c0, c1) { + + var at = a1 - b1 + b0; + var ct = c0 + at - a0; + + if (b[b0] < _r) while (c0 < ct) c[c0++] = 0; + else while (c0 < ct) c[c0++] = a[a0++]; + + while (c0 < c1) c[c0++] = a[at++] & b[b0++]; + + }; + +}; + + + + +/** + * LITTLE ENDIAN BINARY and APPLIED ON a AND b + * + * Meaningful only when r is a power of 2. + * + * |a| >= |b| > 0 + * + * treats b as if it was represented with the same number of blocks as a + */ + +var land_t = function(r){ + + var _r = r / 2; + + return function (a, a0, a1, b, b0, b1, c, c0, c1) { + + var ct = c0 + b1 - b0; + + while (c0 < ct) c[c0++] = a[a0++] & b[b0++]; + + if (b[b0 - 1] < _r) while (c0 < c1) c[c0++] = 0; + else while (c0 < c1) c[c0++] = a[a0++]; + + + }; + +}; + + +exports.and = and; +exports.land_t = land_t; +exports.band_t = band_t; +/* /home/genius/Bureau/alu/js/src/cmp */ +/* /home/genius/Bureau/alu/js/src/cmp/cmp.js */ + +var bcmp_t = function(){ + + + /** + * Compares two big endian arrays, |a| >= |b| + * + * @param a first operand + * @param ai a left + * @param aj a right + * @param b second operand + * @param bi b left + * @param bj b right + * + * @return 1 if a > b; 0 if a = b; -1 otherwise. + */ + + return function(a, ai, aj, b, bi, bj){ + + var tmp = aj - bj + bi; + + for (; ai < tmp; ++ai) + if (a[ai] > 0) return 1; + + + // same size aj - ai === bj - bi + for (; ai < aj; ++ai, ++bi) { + if (a[ai] > b[bi]) return 1; + if (a[ai] < b[bi]) return -1; + } + + return 0; + }; + +}; + +var lcmp_t = function(){ + + /** + * Compares two little endian arrays, |a| >= |b| + * + * @param a first operand + * @param ai a left + * @param aj a right + * @param b second operand + * @param bi b left + * @param bj b right + * + * @return 1 if a > b; 0 if a = b; -1 otherwise. + */ + + return function(a, ai, aj, b, bi, bj){ + + var tmp = ai + bj - bi; + + --aj; --bj; + + for (; aj >= tmp; --aj) + if (a[aj] > 0) return 1; + + + // same size aj - ai === bj - bi + for (; aj >= ai; --aj, --bj) { + if (a[aj] > b[bj]) return 1; + if (a[aj] < b[bj]) return -1; + } + + return 0; + }; +}; + +exports.bcmp_t = bcmp_t; +exports.lcmp_t = lcmp_t; +/* /home/genius/Bureau/alu/js/src/cmp/eq.js */ + + +/** + * Wrapper for a comparison operator that returns true iff + * _a_ is equal to _b_. + */ + +var eq_t = function(cmp){ + return function (a, ai, aj, b, bi, bj) { + return cmp(a, ai, aj, b, bi, bj) === 0; + }; +}; + +exports.eq_t = eq_t; +/* /home/genius/Bureau/alu/js/src/cmp/ge.js */ + + +/** + * Wrapper for a comparison operator that returns true iff + * _a_ is greater or equal to _b_. + */ + +var ge_t = function(cmp){ + return function (a, ai, aj, b, bi, bj) { + return cmp(a, ai, aj, b, bi, bj) >= 0; + }; +}; + +exports.ge_t = ge_t; +/* /home/genius/Bureau/alu/js/src/cmp/gt.js */ + + +/** + * Wrapper for a comparison operator that returns true iff + * _a_ is greater than _b_. + */ + +var gt_t = function(cmp){ + return function (a, ai, aj, b, bi, bj) { + return cmp(a, ai, aj, b, bi, bj) > 0; + }; +}; + +exports.gt_t = gt_t; +/* /home/genius/Bureau/alu/js/src/cmp/le.js */ + + +/** + * Wrapper for a comparison operator that returns true iff + * _a_ is less or equal to _b_. + */ + +var le_t = function(cmp){ + return function (a, ai, aj, b, bi, bj) { + return cmp(a, ai, aj, b, bi, bj) <= 0; + }; +}; + +exports.le_t = le_t; +/* /home/genius/Bureau/alu/js/src/cmp/lt.js */ + + +/** + * Wrapper for a comparison operator that returns true iff + * _a_ is less than _b_. + */ + +var lt_t = function(cmp){ + return function (a, ai, aj, b, bi, bj) { + return cmp(a, ai, aj, b, bi, bj) < 0; + }; +}; + +exports.lt_t = lt_t; +/* /home/genius/Bureau/alu/js/src/cmp/ne.js */ + + +/** + * Wrapper for a comparison operator that returns true iff + * _a_ is not equal to _b_. + */ + +var ne_t = function(cmp){ + return function (a, ai, aj, b, bi, bj) { + return cmp(a, ai, aj, b, bi, bj) !== 0; + }; +}; + +exports.ne_t = ne_t; +/* /home/genius/Bureau/alu/js/src/div */ +/* /home/genius/Bureau/alu/js/src/div/div.js */ + + + +var bdiv_t = function(mov, lt, sub){ + + /** + * Computes quotient and remainder of two big endian arrays. + *

+ * Computes quotient and remainder of two big endian arrays + * using long division algorithm (the one teached in + * european primary schools). + * + * @param a dividend + * @param ai a left + * @param aj a right + * @param b divisor + * @param bi b left + * @param bj b right + * @param q quotient, must be 0 initialized + * @param qi q left + * @param qj q right + * @param r remainder + * @param ri r left + * @param rj r right + */ + + var div = function(a, ai, aj, b, bi, bj, q, qi, qj, r, ri, rj){ + var k, t = ri + 1; + + // copy dividend in remainder + mov(a, ai, aj, r, ri); + + do { + + // trim leading zeros + // - maybe could try to put this procedure inside the sub loop + while (ri < rj && r[ri] === 0) ++ri; + + // search for a remainder block interval + // greater than the divisor + // - maybe could try binary search on the lt function + // for another implementation + k = ri + 1; + while (k <= rj && lt(r, ri, k, b, bi, bj)) ++k; + + // remainder smaller than divisor --> end + if (k > rj) break; + + // divide current block interval by quotient + do{ + + // increment quotient block corresponding + // to current ls block of remainder interval + ++q[qi + k - t]; + + // subtract divisor from current remainder + // block interval + sub(r, ri, k, b, bi, bj, r, ri, k); + + } while(!lt(r, ri, k, b, bi, bj)); + + + } while(k <= rj); + + }; + + return div; + +}; + +exports.bdiv_t = bdiv_t; +/* /home/genius/Bureau/alu/js/src/gcd */ +/* /home/genius/Bureau/alu/js/src/gcd/gcd.js */ +/** + * COMPUTE THE GREATEST COMMON DIVISOR OF a AND b + */ +/* /home/genius/Bureau/alu/js/src/lcm */ +/* /home/genius/Bureau/alu/js/src/lcm/lcm.js */ +/** + * COMPUTE THE LEAST COMMON MULTIPLE OF a AND b + */ +/* /home/genius/Bureau/alu/js/src/log */ +/* /home/genius/Bureau/alu/js/src/log/log.js */ + +/** + * FOR A NUMBER n COMPUTE THE GREATEST k SUCH THAT 2^k < n + */ +/* /home/genius/Bureau/alu/js/src/mod */ +/* /home/genius/Bureau/alu/js/src/mod/mod.js */ + +/** + * COMPUTE MODULUS (a % b) + */ +/* /home/genius/Bureau/alu/js/src/mod/montgomery.js */ + +/** + * COMPUTE MODULUS USING MONTGOMERY REDUCTION : http://en.wikipedia.org/wiki/Montgomery_reduction + */ +/* /home/genius/Bureau/alu/js/src/mpow */ +/* /home/genius/Bureau/alu/js/src/mpow/mpow.js */ +/** + * MODULAR EXPONENTIATION : http://en.wikipedia.org/wiki/Modular_exponentiation + */ +/* /home/genius/Bureau/alu/js/src/mul */ +/* /home/genius/Bureau/alu/js/src/mul/karatsuba.js */ /** * /!\ BLOCK MULTIPLICATION RESULT MUST HOLD IN THE JAVASCRIPT NUMBER TYPE (DOUBLE i.e. 53 bits) * @@ -225,8 +584,95 @@ var bkaratsuba_t = function(add, sub, mul, num, mov, r, wrap){ exports.bkaratsuba_t = bkaratsuba_t; -/* /home/genius/alu/js/src/stringify */ -/* /home/genius/alu/js/src/stringify/stringify.js */ +/* /home/genius/Bureau/alu/js/src/mul/mul.js */ + /** + * Computes product of two big endian arrays. + *

+ * Computes product of two big endian arrays + * using long multiplication algorithm (the one teached in + * european primary schools) + */ +/* /home/genius/Bureau/alu/js/src/neg */ +/* /home/genius/Bureau/alu/js/src/neg/neg.js */ +/** + * COMPUTE THE NEGATIVE VALUE OF NUMBER n + */ +/* /home/genius/Bureau/alu/js/src/not */ +/* /home/genius/Bureau/alu/js/src/not/not.js */ +/** + * BINARY not APPLIED ON a + */ +/* /home/genius/Bureau/alu/js/src/or */ +/* /home/genius/Bureau/alu/js/src/or/or.js */ +/** + * BINARY or APPLIED ON a AND b + */ +/* /home/genius/Bureau/alu/js/src/parse */ +/* /home/genius/Bureau/alu/js/src/parse/parse.js */ + +/** + * Function template for number parsing. + * Endianess provided by the iterator function + * iterator function must be reverse ordered + * + * @param {int} f from radix + * @param {int} t to radix + * @param {function} iter iterator function + */ + + +var parse_t = function(t, f, iter){ + + if(t >= f){ + + if(f > 36) throw 'f > 36 not implemented'; + + var z = 0, log = t; + while(log >= f){ + if (log % f) break; + log /= f; + ++z; + } + + if (log !== 1) throw 'log(f) does not divide log(t) not implemented'; + + // immediate log(t) divides log(f) + return function(s, si, sj, a, ai, aj){ + var len = sj - si, k = sj - z, n = Math.ceil(len / z); + var block = function(i){ + a[i] = parseInt(s.slice(Math.max(0, k), k + z), f); + k -= z; + }; + + iter(aj - n, aj, block); + + }; + + } + else throw 'f > t not implemented'; + + +}; + + +exports.parse_t = parse_t; +/* /home/genius/Bureau/alu/js/src/pow */ +/* /home/genius/Bureau/alu/js/src/pow/pow.js */ +/** + * COMPUTES a^b + */ +/* /home/genius/Bureau/alu/js/src/sha */ +/* /home/genius/Bureau/alu/js/src/sha/sha.js */ +/** + * ARITHMETIC SHIFT + */ +/* /home/genius/Bureau/alu/js/src/shl */ +/* /home/genius/Bureau/alu/js/src/shl/shl.js */ +/** + * LOGICAL SHIFT + */ +/* /home/genius/Bureau/alu/js/src/stringify */ +/* /home/genius/Bureau/alu/js/src/stringify/stringify.js */ /** * Function template for number stringification. @@ -269,8 +715,8 @@ var stringify_t = function(f, t, iter, zfill_t){ }; exports.stringify_t = stringify_t; -/* /home/genius/alu/js/src/sub */ -/* /home/genius/alu/js/src/sub/sub.js */ +/* /home/genius/Bureau/alu/js/src/sub */ +/* /home/genius/Bureau/alu/js/src/sub/sub.js */ /** * @param r base (radix) @@ -295,7 +741,7 @@ var bsub_t = function(r){ */ return function(a, i0, i1, b, j0, j1, c, k0, k1){ - var t, T, C = 0; + var T, C = 0; while(--j1 >= j0){ --i1; --k1; @@ -313,7 +759,7 @@ var bsub_t = function(r){ if(C){ while(--k1 >= k0){ - c[k0] = r - 1; + c[k1] = r - 1; } } @@ -342,7 +788,7 @@ var lsub_t = function(r){ */ return function(a, i0, i1, b, j0, j1, c, k0, k1){ - var t, T, C = 0; + var T, C = 0; while(j0 < j1){ T = C; @@ -372,8 +818,8 @@ var lsub_t = function(r){ exports.bsub_t = bsub_t; exports.lsub_t = lsub_t; -/* /home/genius/alu/js/src/wrap */ -/* /home/genius/alu/js/src/wrap/wrap.js */ +/* /home/genius/Bureau/alu/js/src/wrap */ +/* /home/genius/Bureau/alu/js/src/wrap/wrap.js */ /** * Wrapper for binary operator. * Ensures @@ -425,4 +871,9 @@ var wrapmov = function(fn){ exports.wrapbin = wrapbin; exports.wrapmov = wrapmov; +/* /home/genius/Bureau/alu/js/src/xor */ +/* /home/genius/Bureau/alu/js/src/xor/xor.js */ +/** + * BINARY xor APPLIED ON a AND b + */ })(typeof exports === 'undefined' ? this['alu'] = {} : exports); diff --git a/js/dist/alu.js.map b/js/dist/alu.js.map index 3394199..0c7de37 100644 --- a/js/dist/alu.js.map +++ b/js/dist/alu.js.map @@ -1 +1 @@ -{"version":3,"file":"/home/genius/alu/js/dist//alu.js.map","sources":["/home/genius/alu/js/dist//alu.js"],"names":["exports","badd_t","r","a","i0","i1","b","j0","j1","c","k0","k1","t","C","ladd_t","bkaratsuba_t","add","sub","mul","num","mov","wrap","karatsuba","z0","z2","t1","t2","t3","p","I","P","P_","i_","j_","i","j","k","Math","ceil","max","undefined","stringify_t","f","iter","zfill_t","z","zfill","s","push","Number","toString","join","bsub_t","T","lsub_t","wrapbin","fn","wrapmov","this"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"/home/genius/Bureau/alu/js/dist//alu.js.map","sources":["/home/genius/Bureau/alu/js/dist//alu.js"],"names":["exports","badd_t","r","a","i0","i1","b","j0","j1","c","k0","k1","t","C","ladd_t","and","a0","b0","c0","c1","band_t","_r","a1","b1","at","ct","land_t","bcmp_t","ai","aj","bi","bj","tmp","lcmp_t","eq_t","cmp","ge_t","gt_t","le_t","lt_t","ne_t","bdiv_t","mov","lt","sub","div","q","qi","qj","ri","rj","k","bkaratsuba_t","add","mul","num","wrap","karatsuba","z0","z2","t1","t2","t3","p","I","P","P_","i_","j_","i","j","Math","ceil","max","undefined","parse_t","f","iter","z","log","s","si","sj","len","n","block","parseInt","slice","stringify_t","zfill_t","zfill","push","Number","toString","join","bsub_t","T","lsub_t","wrapbin","fn","wrapmov","this"],"mappings":"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"} \ No newline at end of file diff --git a/js/dist/alu.min.js b/js/dist/alu.min.js index 3845604..7485b8d 100644 --- a/js/dist/alu.min.js +++ b/js/dist/alu.min.js @@ -1 +1,2 @@ -!function(n){"use strict";var t=function(n){return function(t,r,o,f,i,u,e,a,c){for(var v,d=0;--u>=i;)--o,--c,v=t[o]+f[u]+d,e[c]=v%n,d=v/n>=1;for(;--o>=r;)--c,v=t[o]+d,e[c]=v%n,d=v/n>=1;--c>=a&&(e[c]=+d)}},r=function(n){return function(t,r,o,f,i,u,e,a,c){for(var v,d=0;u>i;)v=t[r]+f[i]+d,e[a]=v%n,d=v/n>=1,++r,++i,++a;for(;o>r;)v=t[r]+d,e[a]=v%n,d=v/n>=1,++r,++a;c>a&&(e[a]=+d)}};n.badd_t=t,n.ladd_t=r;var o=function(n,t,r,o,f,i,u){var e=function(u,e,a,c,v,d,m,s,h){var w,l,p,b,x,_,M,g,y,j,k,N=a-e,S=d-v,q=h-s;0>=N||0>=S||0>=q||(1===N?(w=u[e]*c[v],m[h-1]=w%i,q>1&&(m[h-2]=(w-m[h-1])/i)):(_=Math.ceil(N/2),M=N+S,g=2*_,y=M-g,j=a-_,k=Math.max(v,d-_),p=new o(_+1),b=new o(_+1),x=new o(g+1),l=new o(y),w=new o(g),r(u,e,j,c,v,k,l,0,y),r(u,j,a,c,k,d,w,0,g),n(u,j,a,u,e,j,p,0,_+1),n(c,v,k,c,k,d,b,0,_+1),r(p,1,_+1,b,1,_+1,x,1,g+1),f(l,0,y,m,h-M),f(w,0,g,m,h-g),p[0]&&n(x,0,g+1-_,b,1,_+1,x,0,g+1-_),b[0]&&n(x,0,g+1-_,p,1,_+1,x,0,g+1-_),p[0]&&b[0]&&n(x,0,g-_,p,0,1,x,0,g-_),n(m,s,h-_,x,0,g+1,m,s,h-_),t(m,s,h-_,l,0,y,m,s,h-_),t(m,s,h-_,w,0,g,m,s,h-_)))};return void 0!==u&&(e=u(e)),void 0===r&&(r=e),e};n.bkaratsuba_t=o;var f=function(n,t,r,o){if(n>=t){if(t>36)throw"t > 36 not implemented";for(var f=0;n>=t&&!(n%t);)n/=t,++f;if(1!==n)throw"log(t) does not divide log(f) not implemented";var i=o(f);return function(n,o,f){var u=[];return r(o,f,function(r){u.push(i(Number(+n[r]).toString(t)))}),u.join("")}}throw"t > f not implemented"};n.stringify_t=f;var i=function(n){return function(t,r,o,f,i,u,e,a,c){for(var v,d=0;--u>=i;)--o,--c,v=d,d=t[o]=r;)--c,v=d,d=t[o]=a;)e[a]=n-1}},u=function(n){return function(t,r,o,f,i,u,e,a,c){for(var v,d=0;u>i;)v=d,d=t[r]r;)v=d,d=t[r]a;)e[a]=n-1,++a}};n.bsub_t=i,n.lsub_t=u;var e=function(n){return function(t,r,o,f,i,u,e,a,c){var v,d,m;return a=Math.max(0,a),m=c-a,r=Math.max(0,r,o-m),i=Math.max(0,i,u-m),v=o-r,d=u-i,d>v?n(f,i,u,t,r,o,e,a,c):n(t,r,o,f,i,u,e,a,c)}},a=function(n){return function(t,r,o,f,i){return 0>r&&(i-=r,r=0),0>i&&(r-=i,i=0),n(t,r,o,f,i)}};n.wrapbin=e,n.wrapmov=a}("undefined"==typeof exports?this.alu={}:exports); \ No newline at end of file +!function(n){"use strict";var r=function(n){return function(r,t,o,f,u,e,i,a,c){for(var v,d=0;--e>=u;)--o,--c,v=r[o]+f[e]+d,i[c]=v%n,d=v/n>=1;for(;--o>=t;)--c,v=r[o]+d,i[c]=v%n,d=v/n>=1;--c>=a&&(i[c]=+d)}},t=function(n){return function(r,t,o,f,u,e,i,a,c){for(var v,d=0;e>u;)v=r[t]+f[u]+d,i[a]=v%n,d=v/n>=1,++t,++u,++a;for(;o>t;)v=r[t]+d,i[a]=v%n,d=v/n>=1,++t,++a;c>a&&(i[a]=+d)}};n.badd_t=r,n.ladd_t=t;var o=function(n,r,t,o,f,u,e){for(;e>u;)f[u++]=n[r++]&t[o++]},f=function(n){var r=n/2;return function(n,t,o,f,u,e,i,a,c){var v=o-e+u,d=a+v-t;if(f[u]a;)i[a++]=0;else for(;d>a;)i[a++]=n[t++];for(;c>a;)i[a++]=n[v++]&f[u++]}},u=function(n){var r=n/2;return function(n,t,o,f,u,e,i,a,c){for(var v=a+e-u;v>a;)i[a++]=n[t++]&f[u++];if(f[u-1]a;)i[a++]=0;else for(;c>a;)i[a++]=n[t++]}};n.and=o,n.land_t=u,n.band_t=f;var e=function(){return function(n,r,t,o,f,u){for(var e=t-u+f;e>r;++r)if(n[r]>0)return 1;for(;t>r;++r,++f){if(n[r]>o[f])return 1;if(n[r]=e;--t)if(n[t]>0)return 1;for(;t>=r;--t,--u){if(n[t]>o[u])return 1;if(n[t]=0}};n.ge_t=c;var v=function(n){return function(r,t,o,f,u,e){return n(r,t,o,f,u,e)>0}};n.gt_t=v;var d=function(n){return function(r,t,o,f,u,e){return n(r,t,o,f,u,e)<=0}};n.le_t=d;var l=function(n){return function(r,t,o,f,u,e){return n(r,t,o,f,u,e)<0}};n.lt_t=l;var m=function(n){return function(r,t,o,f,u,e){return 0!==n(r,t,o,f,u,e)}};n.ne_t=m;var _=function(n,r,t){var o=function(o,f,u,e,i,a,c,v,d,l,m,_){var h,s=m+1;n(o,f,u,l,m);do{for(;_>m&&0===l[m];)++m;for(h=m+1;_>=h&&r(l,m,h,e,i,a);)++h;if(h>_)break;do++c[v+h-s],t(l,m,h,e,i,a,l,m,h);while(!r(l,m,h,e,i,a))}while(_>=h)};return o};n.bdiv_t=_;var h=function(n,r,t,o,f,u,e){var i=function(e,i,a,c,v,d,l,m,_){var h,s,p,w,b,g,x,M,k,y,j,q=a-i,I=d-v,N=_-m;0>=q||0>=I||0>=N||(1===q?(h=e[i]*c[v],l[_-1]=h%u,N>1&&(l[_-2]=(h-l[_-1])/u)):(g=Math.ceil(q/2),x=q+I,M=2*g,k=x-M,y=a-g,j=Math.max(v,d-g),p=new o(g+1),w=new o(g+1),b=new o(M+1),s=new o(k),h=new o(M),t(e,i,y,c,v,j,s,0,k),t(e,y,a,c,j,d,h,0,M),n(e,y,a,e,i,y,p,0,g+1),n(c,v,j,c,j,d,w,0,g+1),t(p,1,g+1,w,1,g+1,b,1,M+1),f(s,0,k,l,_-x),f(h,0,M,l,_-M),p[0]&&n(b,0,M+1-g,w,1,g+1,b,0,M+1-g),w[0]&&n(b,0,M+1-g,p,1,g+1,b,0,M+1-g),p[0]&&w[0]&&n(b,0,M-g,p,0,1,b,0,M-g),n(l,m,_-g,b,0,M+1,l,m,_-g),r(l,m,_-g,s,0,k,l,m,_-g),r(l,m,_-g,h,0,M,l,m,_-g)))};return void 0!==e&&(i=e(i)),void 0===t&&(t=i),i};n.bkaratsuba_t=h;var s=function(n,r,t){if(n>=r){if(r>36)throw"f > 36 not implemented";for(var o=0,f=n;f>=r&&!(f%r);)f/=r,++o;if(1!==f)throw"log(f) does not divide log(t) not implemented";return function(n,f,u,e,i,a){var c=u-f,v=u-o,d=Math.ceil(c/o),l=function(t){e[t]=parseInt(n.slice(Math.max(0,v),v+o),r),v-=o};t(a-d,a,l)}}throw"f > t not implemented"};n.parse_t=s;var p=function(n,r,t,o){if(n>=r){if(r>36)throw"t > 36 not implemented";for(var f=0;n>=r&&!(n%r);)n/=r,++f;if(1!==n)throw"log(t) does not divide log(f) not implemented";var u=o(f);return function(n,o,f){var e=[];return t(o,f,function(t){e.push(u(Number(+n[t]).toString(r)))}),e.join("")}}throw"t > f not implemented"};n.stringify_t=p;var w=function(n){return function(r,t,o,f,u,e,i,a,c){for(var v,d=0;--e>=u;)--o,--c,v=d,d=r[o]=t;)--c,v=d,d=r[o]=a;)i[c]=n-1}},b=function(n){return function(r,t,o,f,u,e,i,a,c){for(var v,d=0;e>u;)v=d,d=r[t]t;)v=d,d=r[t]a;)i[a]=n-1,++a}};n.bsub_t=w,n.lsub_t=b;var g=function(n){return function(r,t,o,f,u,e,i,a,c){var v,d,l;return a=Math.max(0,a),l=c-a,t=Math.max(0,t,o-l),u=Math.max(0,u,e-l),v=o-t,d=e-u,d>v?n(f,u,e,r,t,o,i,a,c):n(r,t,o,f,u,e,i,a,c)}},x=function(n){return function(r,t,o,f,u){return 0>t&&(u-=t,t=0),0>u&&(t-=u,u=0),n(r,t,o,f,u)}};n.wrapbin=g,n.wrapmov=x}("undefined"==typeof exports?this.alu={}:exports); +//# sourceMappingURL=/home/genius/Bureau/alu/js/dist//alu.js.map \ No newline at end of file diff --git a/package.json b/package.json index 48e0621..8767828 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "alu", - "version": "0.0.1", + "version": "0.0.2", "description": "natural numbers algorithm templates for JavaScript", "main": "js/dist/alu.js", "dependencies": {}, "devDependencies": { "coveralls": "^2.10.0", "optimist": "^0.6.1", - "algo": "^0.1.1", + "algo": "^0.1.8", "uglify-js": "^2.4.13", "recquire": "^0.1.0", "recbuild": "^0.0.3", diff --git a/test/js/run.js b/test/js/run.js index 54557f8..ae84b31 100644 --- a/test/js/run.js +++ b/test/js/run.js @@ -1,8 +1,13 @@ var argv = require('optimist').argv; +var path = require('path'); var testrunner = require('qunit'); testrunner.options.coverage = true; +testrunner.options.log.tests = false; +testrunner.options.log.testing = false; +testrunner.options.log.assertions = false; +testrunner.options.log.summary = false; var cb = function(err, report) { // console.dir(report); @@ -12,7 +17,8 @@ var run = function(item, ns) { testrunner.run( { code : { - path :[__dirname, '..', '..', 'js', 'index.js'].join('/'), + // path : path.normalize([__dirname, '..', '..', 'js', 'index.js'].join('/')), + path : path.normalize([__dirname, '..', '..', 'js', 'dist', 'alu.js'].join('/')), namespace: ns }, tests : [__dirname, item].join('/') diff --git a/test/js/src/and/raw.js b/test/js/src/and/raw.js index 57a11c1..9efb719 100644 --- a/test/js/src/and/raw.js +++ b/test/js/src/and/raw.js @@ -24,7 +24,7 @@ var check = function(Ctor, iter){ var as = test[0]; var ai = 0; - var aj = Math.ceil(as.length * Math.log(f) / (Ctor.BYTES_PER_ELEMENT * 8)); + var aj = Math.ceil(as.length * Math.log(f) / Math.log(r)); var a = new Ctor(aj); var c = new Ctor(aj); parse(as, 0, as.length, a, ai, aj); @@ -32,7 +32,7 @@ var check = function(Ctor, iter){ var bs = test[1]; var bi = 0; - var bj = Math.ceil(bs.length * Math.log(f) / (Ctor.BYTES_PER_ELEMENT * 8)); + var bj = Math.ceil(bs.length * Math.log(f) / Math.log(r)); var b = new Ctor(bj); parse(bs, 0, bs.length, b, bi, bj); @@ -40,7 +40,7 @@ var check = function(Ctor, iter){ var ds = test[2]; var di = 0; - var dj = Math.ceil(ds.length * Math.log(f) / (Ctor.BYTES_PER_ELEMENT * 8)); + var dj = Math.ceil(ds.length * Math.log(f) / Math.log(r)); var d = new Ctor(dj); parse(ds, 0, ds.length, d, di, dj); diff --git a/test/js/src/cmp.js b/test/js/src/cmp.js index 9bcf9f2..294c232 100644 --- a/test/js/src/cmp.js +++ b/test/js/src/cmp.js @@ -5,7 +5,7 @@ var fmt = util.format; -var check = function(Ctor, cmp, iter){ +var check = function(Ctor, cmp, iter, transform){ var name = fmt("alu.cmp<%s, %s, %s>", Ctor.name, cmp[0], iter[0]); cmp = cmp[1]; @@ -24,19 +24,19 @@ var check = function(Ctor, cmp, iter){ var as = test[0]; var ai = 0; - var aj = Math.ceil(as.length / Ctor.BYTES_PER_ELEMENT); + var aj = Math.ceil(as.length * Math.log(f) / Math.log(r)); var a = new Ctor(aj); parse(as, 0, as.length, a, ai, aj); var bs = test[1]; var bi = 0; - var bj = Math.ceil(bs.length / Ctor.BYTES_PER_ELEMENT); + var bj = Math.ceil(bs.length * Math.log(f) / Math.log(r)); var b = new Ctor(bj); parse(bs, 0, bs.length, b, bi, bj); var actual = cmp(a, ai, aj, b, bi, bj); - var expected = test[2]; + var expected = transform(test[2], 0); deepEqual(actual, expected, fmt("cmp('%s','%s') === %d", as, bs, expected)); } @@ -76,6 +76,66 @@ var TEST = [ ['9989748488', '4545464646', 1], ['4848484848', '4747474747', 1], ['1541548549', '1541548548', 1], + + ['00123456789', '9876543210', -1], + ['00000000000', '9876543210', -1], + ['09876543209', '9876543210', -1], + ['00123456788', '0123456789', -1], + ['00123456780', '0123456789', -1], + ['00000000000', '0000000007', -1], + ['04545464646', '9989748488', -1], + ['04747474747', '4848484848', -1], + ['01541548548', '1541548549', -1], + + ['00000000000', '0000000000', 0], + ['00000000001', '0000000001', 0], + ['00123456789', '0123456789', 0], + ['01213245874', '1213245874', 0], + ['04548848484', '4548848484', 0], + ['06465664848', '6465664848', 0], + ['07887878787', '7887878787', 0], + ['09824564878', '9824564878', 0], + ['09876543210', '9876543210', 0], + + ['09876543210', '0123456789', 1], + ['09876543210', '0000000000', 1], + ['09876543210', '9876543209', 1], + ['00123456789', '0123456788', 1], + ['00123456789', '0123456780', 1], + ['00000000007', '0000000000', 1], + ['09989748488', '4545464646', 1], + ['04848484848', '4747474747', 1], + ['01541548549', '1541548548', 1], + + ['10123456789', '9876543210', 1], + ['10000000000', '9876543210', 1], + ['19876543209', '9876543210', 1], + ['10123456788', '0123456789', 1], + ['10123456780', '0123456789', 1], + ['10000000000', '0000000007', 1], + ['14545464646', '9989748488', 1], + ['14747474747', '4848484848', 1], + ['11541548548', '1541548549', 1], + + ['10000000000', '0000000000', 1], + ['10000000001', '0000000001', 1], + ['10123456789', '0123456789', 1], + ['11213245874', '1213245874', 1], + ['14548848484', '4548848484', 1], + ['16465664848', '6465664848', 1], + ['17887878787', '7887878787', 1], + ['19824564878', '9824564878', 1], + ['19876543210', '9876543210', 1], + + ['19876543210', '0123456789', 1], + ['19876543210', '0000000000', 1], + ['19876543210', '9876543209', 1], + ['10123456789', '0123456788', 1], + ['10123456789', '0123456780', 1], + ['10000000007', '0000000000', 1], + ['19989748488', '4545464646', 1], + ['14848484848', '4747474747', 1], + ['11541548549', '1541548548', 1], ]; @@ -87,11 +147,28 @@ var TRAITS = [ Uint32Array, ]; + +var bcmp = alu.bcmp_t(); +var lcmp = alu.lcmp_t(); +var dummy = function(x){ return x; }; + var ENDIANESS = [ - [['alu.bcmp_t', alu.bcmp_t()], ['algo.biter', algo.biter]], - [['alu.lcmp_t', alu.lcmp_t()], ['algo.fiter', algo.fiter]], + [['alu.bcmp_t', bcmp], ['algo.biter', algo.biter], dummy], + [['alu.lcmp_t', lcmp], ['algo.fiter', algo.fiter], dummy], + [['alu.eq', alu.eq_t(bcmp)], ['algo.biter', algo.biter], algo.eq], + [['alu.eq', alu.eq_t(lcmp)], ['algo.fiter', algo.fiter], algo.eq], + [['alu.ge', alu.ge_t(bcmp)], ['algo.biter', algo.biter], algo.ge], + [['alu.ge', alu.ge_t(lcmp)], ['algo.fiter', algo.fiter], algo.ge], + [['alu.gt', alu.gt_t(bcmp)], ['algo.biter', algo.biter], algo.gt], + [['alu.gt', alu.gt_t(lcmp)], ['algo.fiter', algo.fiter], algo.gt], + [['alu.le', alu.le_t(bcmp)], ['algo.biter', algo.biter], algo.le], + [['alu.le', alu.le_t(lcmp)], ['algo.fiter', algo.fiter], algo.le], + [['alu.lt', alu.lt_t(bcmp)], ['algo.biter', algo.biter], algo.lt], + [['alu.lt', alu.lt_t(lcmp)], ['algo.fiter', algo.fiter], algo.lt], + [['alu.ne', alu.ne_t(bcmp)], ['algo.biter', algo.biter], algo.ne], + [['alu.ne', alu.ne_t(lcmp)], ['algo.fiter', algo.fiter], algo.ne], ]; for (var j = 0; j < ENDIANESS.length; ++j) for (var i = 0; i < TRAITS.length; ++i) - check(TRAITS[i], ENDIANESS[j][0], ENDIANESS[j][1]); \ No newline at end of file + check(TRAITS[i], ENDIANESS[j][0], ENDIANESS[j][1], ENDIANESS[j][2]); \ No newline at end of file diff --git a/test/js/src/div.js b/test/js/src/div.js index 18cbb6f..ff903ff 100644 --- a/test/js/src/div.js +++ b/test/js/src/div.js @@ -40,23 +40,23 @@ var check = function(Ctor, cmp, biter, div, sub, fiter){ var as = test[0]; var ai = 0; - var aj = Math.ceil(as.length / Ctor.BYTES_PER_ELEMENT / 2); + var aj = Math.ceil(as.length * Math.log(f) / Math.log(r)); var a = new Ctor(aj); - var r = new Ctor(aj); + var _r = new Ctor(aj); var q = new Ctor(aj); parse(as, 0, as.length, a, ai, aj); var bs = test[1]; var bi = 0; - var bj = Math.ceil(bs.length / Ctor.BYTES_PER_ELEMENT / 2); + var bj = Math.ceil(bs.length * Math.log(f) / Math.log(r)); var b = new Ctor(bj); parse(bs, 0, bs.length, b, bi, bj); - div(a, ai, aj, b, bi, bj, q, ai, aj, r, ai, aj); + div(a, ai, aj, b, bi, bj, q, ai, aj, _r, ai, aj); var qactual = parseInt(stringify(q, ai, aj), f); var qexpected = parseInt(test[2], f); - var ractual = parseInt(stringify(r, ai, aj), f); + var ractual = parseInt(stringify(_r, ai, aj), f); var rexpected = parseInt(test[3], f); var a10 = parseInt(as, 16);