RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: [email protected] Module: rpm Date: 02-Aug-2009 00:13:59 Branch: HEAD Handle: 2009080122135800 Modified files: rpm/js rpmmpw-js.c rpm/js/tscripts Mpw.js Log: - js: clean up most of the failing mpw unit tests. Summary: Revision Changes Path 1.10 +33 -4 rpm/js/rpmmpw-js.c 1.10 +26 -24 rpm/js/tscripts/Mpw.js ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/js/rpmmpw-js.c ============================================================================ $ cvs diff -u -r1.9 -r1.10 rpmmpw-js.c --- rpm/js/rpmmpw-js.c 1 Aug 2009 20:47:14 -0000 1.9 +++ rpm/js/rpmmpw-js.c 1 Aug 2009 22:13:58 -0000 1.10 @@ -1330,11 +1330,16 @@ zsize = asize; zdata = alloca(zsize * sizeof(*zdata)); +#ifdef DYING /* XXX Python dares to be different. */ zsign = x->ob_size * m->ob_size; +#else + zsign = x->ob_size; +#endif wksp = alloca((2*bsize+1) * sizeof(*wksp)); mpmod(zdata, asize, adata, bsize, bdata, wksp); +#ifdef DYING /* XXX Python dares to be different. */ if (zsign < 0) { if (m->ob_size < 0) { (void) mpsubx(zsize, zdata, bsize, bdata); @@ -1345,13 +1350,16 @@ (void) mpaddx(zsize, zdata, bsize, bdata); } } +#endif z = mpw_FromMPW(zsize, zdata, 1); - if (zsign < 0) { + if (zsign < 0) z->ob_size = -z->ob_size; - } else if (zsign > 0) { +#ifdef DYING /* XXX Python dares to be different. */ + else if (zsign > 0) { if (x->ob_size < 0) z->ob_size = -z->ob_size; } +#endif break; case '<': /* XXX FIXME: enlarge? negative count? sign?. */ @@ -1568,18 +1576,31 @@ mpw_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL); - mpwObject * a = ptr; jsuint _base = 10; JSBool ok; _METHOD_DEBUG_ENTRY(_debug); if ((ok = JS_ConvertArguments(cx, argc, argv, "/u", &_base))) { - *rval = mpw_format(cx, a, _base, 0); + /* XXX FIXME check _base is 0 or [2,36] */ + *rval = mpw_format(cx, ptr, _base, 0); } else *rval = JSVAL_VOID; return ok; } +/** Convert to string in base 10. */ +static JSBool +mpw_valueOf(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL); + jsuint _base = 10; + JSBool ok = JS_TRUE; + +_METHOD_DEBUG_ENTRY(_debug); + *rval = mpw_format(cx, ptr, _base, 0); + return ok; +} + #ifdef DYING /** Return random number 1 < r < b-1. */ static JSBool @@ -1597,7 +1618,15 @@ #endif static JSFunctionSpec rpmmpw_funcs[] = { +#ifdef NOTYET + JS_FS("toExponential", mpw_toExponential, 0,0,0), + JS_FS("toFixed", mpw_toFixed, 0,0,0), + JS_FS("toLocaleString", mpw_toLocaleString, 0,0,0), + JS_FS("toSource", mpw_toSource, 0,0,0), + JS_FS("toJSON", mpw_toJSON, 0,0,0), +#endif JS_FS("toString", mpw_toString, 0,0,0), + JS_FS("valueOf", mpw_valueOf, 0,0,0), JS_FS_END }; @@ . patch -p0 <<'@@ .' Index: rpm/js/tscripts/Mpw.js ============================================================================ $ cvs diff -u -r1.9 -r1.10 Mpw.js --- rpm/js/tscripts/Mpw.js 1 Aug 2009 20:47:15 -0000 1.9 +++ rpm/js/tscripts/Mpw.js 1 Aug 2009 22:13:58 -0000 1.10 @@ -38,10 +38,13 @@ var m = mpw(15); ack('m.toString(10)', '15'); +ack('m.toString(10)', m.valueOf()); var x = mpw(7); ack('x.toString(10)', '7'); +ack('x.toString(10)', x.valueOf()); var y = mpw(13); ack('y.toString(10)', '13'); +ack('y.toString(10)', y.valueOf()); ack('mpw(x, m, "invm").toString(10)', '13'); ack('mpw(x, m, "sqrm").toString(10)', '4'); @@ -53,7 +56,7 @@ var zx = 2*3*5*19; var zy = 7*11*13*19; -ack('mpw(mpw(zx), mpw(zy), "gcd").toString(10)', '19'); +ack('mpw(zx, zy, "gcd").toString(10)', '19'); x = mpw(zx, "neg"); zx = -zx; @@ -122,13 +125,13 @@ ack('mpw(wpb, wma, "/").toString(10)', Math.floor(zpb/zma).toString(10)); ack('mpw(wpb, wpa, "/").toString(10)', Math.floor(zpb/zpa).toString(10)); -ack('mpw(wma, wmb, "**").toString(10)', Math.pow(zma, zmb).toString(10)); +ack('mpw(wma, wmb, "**").toString(10)', Math.floor(Math.pow(zma, zmb)).toString(10)); ack('mpw(wma, wpb, "**").toString(10)', Math.pow(zma, zpb).toString(10)); -ack('mpw(wpa, wmb, "**").toString(10)', Math.pow(zpa, zmb).toString(10)); +ack('mpw(wpa, wmb, "**").toString(10)', Math.floor(Math.pow(zpa, zmb)).toString(10)); ack('mpw(wpa, wpb, "**").toString(10)', Math.pow(zpa, zpb).toString(10)); -ack('mpw(wmb, wma, "**").toString(10)', Math.pow(zmb, zma).toString(10)); +ack('mpw(wmb, wma, "**").toString(10)', Math.floor(Math.abs(Math.pow(zmb, zma))).toString(10)); ack('mpw(wmb, wpa, "**").toString(10)', Math.pow(zmb, zpa).toString(10)); -ack('mpw(wpb, wma, "**").toString(10)', Math.pow(zpb, zma).toString(10)); +ack('mpw(wpb, wma, "**").toString(10)', Math.floor(Math.pow(zpb, zma)).toString(10)); ack('mpw(wpb, wpa, "**").toString(10)', Math.pow(zpb, zpa).toString(10)); ack('mpw(wma, wmb, "%").toString(10)', (zma % zmb).toString(10)); @@ -141,35 +144,34 @@ ack('mpw(wpb, wpa, "%").toString(10)', (zpb % zpa).toString(10)); // ===== Knuth poly -var w1 = mpw(1); var lo = 2; -var wm = mpw(lo); -var hi = 15; -var wn = mpw(hi); - -// var bases = [3, 5, 7, 8, 10, 11, 13, 16]; -var bases = [13]; +var hi = 20; +var bases = [8, 10, 16]; for (var i in bases) { var t = bases[i]; - var wt = mpw(t); var tm1 = (t - 1); var tm2 = (t - 2); print("=====\t("+t+"**m - 1) * ("+t+"**n - 1), m,n in ["+lo+","+hi+")"); for (var m = lo; m < hi; m++) { - wm = mpw(m); - wb = mpw(wt, wm, "**"); - wb = mpw(wb, w1, "-"); + wb = mpw(t, m, "**", 1, "-"); for (var n = m+1; n < hi+1; n++) { - wn = mpw(n); - wc = mpw(wt, wn, "**"); - wc = mpw(wc, w1, "-"); + wc = mpw(t, n, "**", 1, "-"); wa = mpw(wb, wc, "*"); - print(wa.toString(t)); -// zs = tm1 * (m - 1) + tm2 + tm1 * (n - m) + "0" * (m - 1) + "1" -// if ws != zs: -// print "(%d**%d - 1) * (%d**%d - 1)\t%s" % (self.t,m,self.t,n,ws) -// assert ws == zs +// print(wa.toString(t)); + switch (t) { + case 8: zs = '0'; break; + case 10: zs = ''; break; + case 16: zs = '0x'; break; + default: zs = t.toString(10) + "#"; break; + } + for (var j = 0; j < (m - 1); j++) zs += (t - 1).toString(t); + zs += (t - 2).toString(t); + for (var j = 0; j < (n - m); j++) zs += (t - 1).toString(t); + for (var j = 0; j < (m - 1); j++) zs += "0"; + zs += "1"; +// print(zs); + ack('wa.toString(t)', zs); } } } @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository [email protected]
