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]

Reply via email to