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:   28-Jul-2009 18:11:49
  Branch: HEAD                             Handle: 2009072816114900

  Modified files:
    rpm/js                  rpmmpw-js.c
    rpm/js/tscripts         Mpw.js

  Log:
    - js: add mpw arithmetic methods and unit tests.

  Summary:
    Revision    Changes     Path
    1.2         +273 -77    rpm/js/rpmmpw-js.c
    1.2         +54 -33     rpm/js/tscripts/Mpw.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/js/rpmmpw-js.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 rpmmpw-js.c
  --- rpm/js/rpmmpw-js.c        27 Jul 2009 22:35:26 -0000      1.1
  +++ rpm/js/rpmmpw-js.c        28 Jul 2009 16:11:49 -0000      1.2
  @@ -12,7 +12,7 @@
   #include "debug.h"
   
   /*...@unchecked@*/
  -static int _debug = -1;
  +static int _debug = 0;
   
   /* Required JSClass vectors */
   #define      rpmmpw_addprop          JS_PropertyStub
  @@ -22,9 +22,9 @@
   /* Optional JSClass vectors */
   #define      rpmmpw_getobjectops     NULL
   #define      rpmmpw_checkaccess      NULL
  -#define      rpmmpw_call             NULL
  -#define      rpmmpw_construct                rpmmpw_ctor
  -#define      rpmmpw_xdrobject                NULL
  +#define      rpmmpw_call             rpmmpw_call
  +#define      rpmmpw_construct        rpmmpw_ctor
  +#define      rpmmpw_xdrobject        NULL
   #define      rpmmpw_hasinstance      NULL
   #define      rpmmpw_mark             NULL
   #define      rpmmpw_reserveslots     NULL
  @@ -949,9 +949,9 @@
       return z;
   }
   
  -#ifdef       NOTYET
  +#define      _CHARMASK(_a)   (_a)
   static mpwObject *
  -mpw_FromString(const char * str, char ** sep, int base)
  +mpw_FromString(const char * str, const char ** sep, int base)
        /*...@*/
   {
       const char * s = str, * se;
  @@ -960,11 +960,13 @@
       int sign = 1;
       int ndigits;
   
  +#ifdef       FIXME
       if ((base != 0 && base < 2) || base > 36) {
        PyErr_SetString(PyExc_ValueError, "mpw() arg 2 must be >= 2 and <= 36");
        return NULL;
       }
  -    while (*s != '\0' && isspace(Py_CHARMASK(*s)))
  +#endif
  +    while (*s != '\0' && isspace(_CHARMASK(*s)))
        s++;
       if (*s == '+')
        ++s;
  @@ -972,7 +974,7 @@
        ++s;
        sign = -1;
       }
  -    while (*s != '\0' && isspace(Py_CHARMASK(*s)))
  +    while (*s != '\0' && isspace(_CHARMASK(*s)))
        s++;
       if (base == 0) {
        if (s[0] != '0')
  @@ -1007,7 +1009,7 @@
   
       if (*se == 'L' || *se == 'l')
        se++; 
  -    while (*se && isspace(Py_CHARMASK(*se)))
  +    while (*se && isspace(_CHARMASK(*se)))
        se++;
       if (sep)
        *sep = se;
  @@ -1033,11 +1035,13 @@
       return z;
   
   onError:
  +#ifdef       FIXME
       PyErr_Format(PyExc_ValueError, "invalid literal for mpw(): %.200s", str);
       Py_XDECREF(z);
  +#endif
       return NULL;
   }
  -#endif
  +#undef       _CHARMASK
   
   static mpwObject *
   mpw_FromHEX(const char * hex)
  @@ -1108,9 +1112,7 @@
   
   /* ---------- */
   
  -/** \ingroup py_c
  - * Compute 2 argument operations.
  - */
  +/** Compute 2 argument operations. */
   static mpwObject *
   mpw_ops2(const char *fname, char op, mpwObject *x, mpwObject *m)
           /*...@*/
  @@ -1420,9 +1422,7 @@
       return z;
   }
   
  -/** \ingroup py_c
  - * Compute 3 argument operations.
  - */
  +/** Compute 3 argument operations. */
   static mpwObject *
   mpw_ops3(const char *fname, char op,
                mpwObject *x, mpwObject *y, mpwObject *m)
  @@ -1498,7 +1498,7 @@
   }
   
   static JSBool
  -mpw_wrap(JSContext *cx, mpwObject * z, jsval *rval)
  +mpw_wrap(JSContext * cx, jsval * rval, mpwObject * z)
   {
       JSObject *o;
       JSBool ok = JS_FALSE;
  @@ -1541,11 +1541,10 @@
   }
   
   /* --- Object methods */
  -/**
  - * Convert to string.
  - */
  +
  +/** Convert to string. */
   static JSBool
  -mpw_ToString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval 
*rval)
  +mpw_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval 
*rval)
   {
       void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
       mpwObject * a = ptr;
  @@ -1560,9 +1559,7 @@
       return ok;
   }
   
  -/**
  - * Compute gcd(x, y).
  - */
  +/** Compute gcd(x, y). */
   static JSBool
   mpw_Gcd(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
   {
  @@ -1574,33 +1571,30 @@
   _METHOD_DEBUG_ENTRY(_debug);
       if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo))) {
        void * z = mpw_ops2("Gcd", 'G', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo));
  -     ok = mpw_wrap(cx, z, rval);
  +     ok = mpw_wrap(cx, rval, z);
       }
       return ok;
   }
   
  -/**
  - * Compute inverse (modulo m) of x.
  - */
  +/** Compute inverse (modulo m) of x. */
   static JSBool
   mpw_Invm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
   {
       void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  -    JSObject * xo;
  +    JSObject *xo;
       JSObject * mo;
       JSBool ok;
   
   _METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &mo))) {
  -     void * z = mpw_ops2("Invm", 'I', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo));
  -     ok = mpw_wrap(cx, z, rval);
  -    }
  +_debug = -1;
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &mo)))
  +     ok = mpw_wrap(cx, rval,
  +             mpw_ops2("Invm", 'I', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo)));
  +_debug = 0;
       return ok;
   }
   
  -/**
  - * Compute x*x (modulo m).
  - */
  +/** Compute x*x (modulo m). */
   static JSBool
   mpw_Sqrm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
   {
  @@ -1610,16 +1604,13 @@
       JSBool ok;
   
   _METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &mo))) {
  -     void * z = mpw_ops2("Sqrm", 'S', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo));
  -     ok = mpw_wrap(cx, z, rval);
  -    }
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &mo)))
  +     ok = mpw_wrap(cx, rval,
  +             mpw_ops2("Sqrm", 'S', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo)));
       return ok;
   }
   
  -/**
  - * Compute x+y (modulo m).
  - */
  +/** Compute x+y (modulo m). */
   static JSBool
   mpw_Addm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
   {
  @@ -1630,17 +1621,14 @@
       JSBool ok;
   
   _METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo))) {
  -     void * z = mpw_ops3("Addm", '+',
  -             mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo));
  -     ok = mpw_wrap(cx, z, rval);
  -    }
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo)))
  +     ok = mpw_wrap(cx, rval,
  +         mpw_ops3("Addm", '+',
  +             mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo)));
       return ok;
   }
   
  -/**
  - * Compute x-y (modulo m).
  - */
  +/** Compute x-y (modulo m). */
   static JSBool
   mpw_Subm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
   {
  @@ -1651,17 +1639,14 @@
       JSBool ok;
   
   _METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo))) {
  -     void * z = mpw_ops3("Subm", '-',
  -             mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo));
  -     ok = mpw_wrap(cx, z, rval);
  -    }
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo)))
  +     ok = mpw_wrap(cx, rval,
  +         mpw_ops3("Subm", '-',
  +             mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo)));
       return ok;
   }
   
  -/**
  - * Compute x*y (modulo m).
  - */
  +/** Compute x*y (modulo m). */
   static JSBool
   mpw_Mulm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
   {
  @@ -1672,17 +1657,14 @@
       JSBool ok;
   
   _METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo))) {
  -     void * z = mpw_ops3("Mulm", '*',
  -             mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo));
  -     ok = mpw_wrap(cx, z, rval);
  -    }
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo)))
  +     ok = mpw_wrap(cx, rval,
  +         mpw_ops3("Mulm", '*',
  +             mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo)));
       return ok;
   }
   
  -/**
  - * Compute x**y (modulo m).
  - */
  +/** Compute x**y (modulo m). */
   static JSBool
   mpw_Powm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
   {
  @@ -1693,11 +1675,10 @@
       JSBool ok;
   
   _METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo))) {
  -     void * z = mpw_ops3("Powm", 'P',
  -             mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo));
  -     ok = mpw_wrap(cx, z, rval);
  -    }
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo)))
  +     ok = mpw_wrap(cx, rval,
  +         mpw_ops3("Powm", 'P',
  +             mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo)));
       return ok;
   }
   
  @@ -1714,16 +1695,193 @@
       JSBool ok;
   
   _METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &mo, &xo))) {
  -     void * z = mpw_ops2("Rndm", 'R', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo));
  -     ok = mpw_wrap(cx, z, rval);
  -    }
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &mo, &xo)))
  +     ok = mpw_wrap(cx, rval,
  +             mpw_ops2("Rndm", 'R', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo)));
       return ok;
   }
   #endif
   
  +/** Compute x+y. */
  +static JSBool
  +mpw_add(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  +{
  +    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  +    JSObject * xo;
  +    JSObject * yo;
  +    JSBool ok;
  +
  +_METHOD_DEBUG_ENTRY(_debug);
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  +     ok = mpw_wrap(cx, rval,
  +             mpw_ops2("add", '+', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  +    return ok;
  +}
  +
  +/** Compute x-y. */
  +static JSBool
  +mpw_sub(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  +{
  +    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  +    JSObject * xo;
  +    JSObject * yo;
  +    JSBool ok;
  +
  +_METHOD_DEBUG_ENTRY(_debug);
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  +     ok = mpw_wrap(cx, rval,
  +             mpw_ops2("sub", '-', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  +    return ok;
  +}
  +
  +/** Compute x*y. */
  +static JSBool
  +mpw_mul(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  +{
  +    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  +    JSObject * xo;
  +    JSObject * yo;
  +    JSBool ok;
  +
  +_METHOD_DEBUG_ENTRY(_debug);
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  +     ok = mpw_wrap(cx, rval,
  +             mpw_ops2("mul", '*', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  +    return ok;
  +}
  +
  +/** Compute x/y. */
  +static JSBool
  +mpw_div(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  +{
  +    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  +    JSObject * xo;
  +    JSObject * yo;
  +    JSBool ok;
  +
  +_METHOD_DEBUG_ENTRY(_debug);
  +    /* XXX check for divide-by-zero */
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  +     ok = mpw_wrap(cx, rval,
  +             mpw_ops2("div", '/', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  +    return ok;
  +}
  +
  +/** Compute x%y. */
  +static JSBool
  +mpw_mod(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  +{
  +    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  +    JSObject * xo;
  +    JSObject * yo;
  +    JSBool ok;
  +
  +_METHOD_DEBUG_ENTRY(_debug);
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  +     ok = mpw_wrap(cx, rval,
  +             mpw_ops2("rem", '%', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  +    return ok;
  +}
  +
  +/** Compute x**y. */
  +static JSBool
  +mpw_pow(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  +{
  +    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  +    JSObject * xo;
  +    JSObject * yo;
  +    JSBool ok;
  +
  +_METHOD_DEBUG_ENTRY(_debug);
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  +     ok = mpw_wrap(cx, rval,
  +             mpw_ops2("pow", 'P', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  +    return ok;
  +}
  +
  +/** Compute x<<y. */
  +static JSBool
  +mpw_lshift(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval 
*rval)
  +{
  +    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  +    JSObject * xo;
  +    JSObject * yo;
  +    JSBool ok;
  +
  +_METHOD_DEBUG_ENTRY(_debug);
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  +     ok = mpw_wrap(cx, rval,
  +             mpw_ops2("lshift", '<', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  +    return ok;
  +}
  +
  +/** Compute x>>y. */
  +static JSBool
  +mpw_rshift(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval 
*rval)
  +{
  +    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  +    JSObject * xo;
  +    JSObject * yo;
  +    JSBool ok;
  +
  +_METHOD_DEBUG_ENTRY(_debug);
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  +     ok = mpw_wrap(cx, rval,
  +             mpw_ops2("rshift", '>', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  +    return ok;
  +}
  +
  +/** Compute x&y. */
  +static JSBool
  +mpw_and(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  +{
  +    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  +    JSObject * xo;
  +    JSObject * yo;
  +    JSBool ok;
  +
  +_METHOD_DEBUG_ENTRY(_debug);
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  +     ok = mpw_wrap(cx, rval,
  +             mpw_ops2("and", '&', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  +    return ok;
  +}
  +
  +/** Compute x^y. */
  +static JSBool
  +mpw_xor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  +{
  +    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  +    JSObject * xo;
  +    JSObject * yo;
  +    JSBool ok;
  +
  +_METHOD_DEBUG_ENTRY(_debug);
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  +     ok = mpw_wrap(cx, rval,
  +             mpw_ops2("xor", '^', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  +    return ok;
  +}
  +
  +/** Compute x|y. */
  +static JSBool
  +mpw_or(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  +{
  +    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  +    JSObject * xo;
  +    JSObject * yo;
  +    JSBool ok;
  +
  +_METHOD_DEBUG_ENTRY(_debug);
  +    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  +     ok = mpw_wrap(cx, rval,
  +             mpw_ops2("or", '|', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  +    return ok;
  +}
  +
   static JSFunctionSpec rpmmpw_funcs[] = {
  -    JS_FS("toString",        mpw_ToString,           0,0,0),
  +    JS_FS("toString",        mpw_toString,           0,0,0),
  +
       JS_FS("gcd",     mpw_Gcd,                0,0,0),
       JS_FS("invm",    mpw_Invm,               0,0,0),
       JS_FS("sqrm",    mpw_Sqrm,               0,0,0),
  @@ -1731,6 +1889,18 @@
       JS_FS("subm",    mpw_Subm,               0,0,0),
       JS_FS("mulm",    mpw_Mulm,               0,0,0),
       JS_FS("powm",    mpw_Powm,               0,0,0),
  +
  +    JS_FS("__add__", mpw_add,                0,0,0),
  +    JS_FS("__sub__", mpw_sub,                0,0,0),
  +    JS_FS("__mul__", mpw_mul,                0,0,0),
  +    JS_FS("__div__", mpw_div,                0,0,0),
  +    JS_FS("__mod__", mpw_mod,                0,0,0),
  +    JS_FS("__pow__", mpw_pow,                0,0,0),
  +    JS_FS("__lshift__",      mpw_lshift,             0,0,0),
  +    JS_FS("__rshift__",      mpw_rshift,             0,0,0),
  +    JS_FS("__and__", mpw_and,                0,0,0),
  +    JS_FS("__xor__", mpw_xor,                0,0,0),
  +    JS_FS("__or__",  mpw_or,                 0,0,0),
       JS_FS_END
   };
   
  @@ -1897,6 +2067,32 @@
       return ok;
   }
   
  +static JSBool
  +rpmmpw_call(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval 
*rval)
  +{
  +    /* XXX obj is the global object so lookup "this" object. */
  +    JSObject * o = NULL;
  +    void * ptr = NULL;
  +    mpwObject * z = ptr;
  +    JSBool ok = JS_FALSE;
  +    jsval v = JSVAL_NULL;
  +    
  +    if (!(ok = JS_ConvertArguments(cx, argc, argv, "/v", &v)))
  +        goto exit;
  +
  +    /* Return a new Mpw object. */
  +    if ((o = rpmjs_NewMpwObject(cx, v)) != NULL)
  +     ptr = z = JS_GetInstancePrivate(cx, o, &rpmmpwClass, NULL);
  +    *rval = OBJECT_TO_JSVAL(o);
  +    ok = JS_TRUE;
  +
  +exit:
  +if (_debug)
  +fprintf(stderr, "<== %s(%p,%p,%p[%u],%p) o %p ptr %p\t", __FUNCTION__, cx, 
obj, argv, (unsigned)argc, rval, o, ptr), mpfprintln(stderr, MPW_SIZE(z), 
MPW_DATA(z));
  +
  +    return ok;
  +}
  +
   /* --- Class initialization */
   JSClass rpmmpwClass = {
       /* XXX class should be "BeeCrypt" eventually, avoid name conflicts for 
now */
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/js/tscripts/Mpw.js
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Mpw.js
  --- rpm/js/tscripts/Mpw.js    27 Jul 2009 22:35:28 -0000      1.1
  +++ rpm/js/tscripts/Mpw.js    28 Jul 2009 16:11:49 -0000      1.2
  @@ -6,47 +6,68 @@
   // ack("mpw.debug = 1;", 1);
   // ack("mpw.debug = 0;", 0);
   
  -var wa = new Mpw('0000000987654321');
  +var wa = mpw('0000000987654321');
   ack('wa.toString(16)', '0x987654321');
   ack('wa.toString(10)', '40926266145')
   ack('wa.toString(8)', '0460731241441')
   ack('wa.toString(2)', '2#100110000111011001010100001100100001')
   
  -var wb = new Mpw(0x10);
  +var wb = mpw(0x10);
   ack('wb.toString(16)', '0x10');
  -var wc = new Mpw('0fedcba000000000');
  +var wc = mpw('0fedcba000000000');
   ack('wc.toString(16)', '0xfedcba000000000');
   
  -var x = new Mpw(2*3*5*19);
  -var y = new Mpw(7*11*13*19);
  -ack('mpw.gcd(x, y).toString(10)', '19');
  +var za = 0x0000000007654321;
  +var wa = mpw(za);
  +var zb = 0x0000000000000010;
  +var wb = mpw(zb);
  +var zc = 0;
  +zc = za + zb;
  +ack('mpw.__add__(wa, wb).toString(10)', zc.toString(10));
  +zc = za - zb;
  +ack('mpw.__sub__(wa, wb).toString(10)', zc.toString(10));
  +zc = za * zb;
  +ack('mpw.__mul__(wa, wb).toString(10)', zc.toString(10));
  +zc = za / zb;
  +ack('mpw.__div__(wa, wb).toString(10)', Math.floor(zc).toString(10));
  +zc = za % zb;
  +ack('mpw.__mod__(wa, wb).toString(10)', zc.toString(10));
  +zc = Math.pow(za, zb);
  +nack('mpw.__pow__(wa, wb).toString(10)', zc.toString(10));
  +zc = za << zb;
  +ack('mpw.__lshift__(wa, wb).toString(10)', zc.toString(10));
  +zc = za >> zb;
  +ack('mpw.__rshift__(wa, wb).toString(10)', zc.toString(10));
  +zc = za & zb;
  +ack('mpw.__and__(wa, wb).toString(10)', zc.toString(10));
  +zc = za ^ zb;
  +ack('mpw.__xor__(wa, wb).toString(10)', zc.toString(10));
  +zc = za | zb;
  +ack('mpw.__or__(wa, wb).toString(10)', zc.toString(10));
  +
  +var m = mpw(15);
  +ack('m.toString(10)', '15');
  +var x = mpw(7);
  +ack('x.toString(10)', '7');
  +var y = mpw(13);
  +ack('y.toString(10)', '13');
  +
  +// FIXME
  +// ack('mpw.invm(x, m).toString(10)', '4');
  +
  +ack('mpw.sqrm(x, m).toString(10)', '4');
  +ack('mpw.addm(x, y, m).toString(10)', '5');
  +ack('mpw.subm(x, y, m).toString(10)', '9');
  +ack('mpw.mulm(x, y, m).toString(10)', '1');
  +ack('mpw.powm(x, y, m).toString(10)', '7');
  +
  +var zx = 2*3*5*19;
  +var zy = 7*11*13*19;
  +x = mpw(zx);
  +ack('x.toString(10)', zx.toString(10));
  +y = mpw(zy);
  +ack('y.toString(10)', zy.toString(10));
   
  -var x = new Mpw(4);
  -var m = new Mpw(15);
  -ack('mpw.invm(x, m).toString(10)', '4');
  -
  -var x = new Mpw(4);
  -var m = new Mpw(15);
  -ack('mpw.sqrm(x, m).toString(10)', '1');
  -
  -var x = new Mpw(4);
  -var y = new Mpw(13);
  -var m = new Mpw(15);
  -ack('mpw.addm(x, y, m).toString(10)', '2');
  -
  -var x = new Mpw(23);
  -var y = new Mpw(6);
  -var m = new Mpw(15);
  -ack('mpw.subm(x, y, m).toString(10)', '2');
  -
  -var x = new Mpw(4);
  -var y = new Mpw(13);
  -var m = new Mpw(15);
  -ack('mpw.mulm(x, y, m).toString(10)', '7');
  -
  -var x = new Mpw(13);
  -var y = new Mpw(4);
  -var m = new Mpw(15);
  -ack('mpw.powm(x, y, m).toString(10)', '1');
  +ack('mpw.gcd(x, y).toString(10)', '19');
   
   if (loglvl) print("<-- Mpw.js");
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to