see http://dev.jquery.com/ticket/3510
greetings On 22 Okt., 15:12, "Jörn Zaefferer" <[EMAIL PROTECTED]> wrote: > Thanks, but the mail client somewhat crippeled the code. Could you > file a ticket?http://dev.jquery.com/newticket(requires registration) > > Thanks! > > Jörn > > On Wed, Oct 22, 2008 at 3:01 PM, markus.staab <[EMAIL PROTECTED]> wrote: > > > updated patch: > > > Index: testrunner.js > > =================================================================== > > --- testrunner.js (revision 5903) > > +++ testrunner.js (working copy) > > @@ -399,7 +399,7 @@ > > var args = Array.prototype.slice.apply(arguments); > > var eq = true; // equivalent until we can explicitely say it's > > not! > > var a, b; // compares a and b (1st and 2nd argument) > > - var len; // for iterating array's length memoization > > + var i, len; // for iterating over objects convenience and for > > iterating array's length memoization > > > if (args.length < 2) { > > return true; // nothing to compare together > > @@ -428,8 +428,8 @@ > > if (len !== b.length) { // safe and faster > > return false; > > } > > - for (var i = 0; i < len; i++) { > > - eq = eq && equiv(a[i], b[i]); > > + for (i = 0; i < len && eq; i++) { > > + eq = equiv(a[i], b[i]); > > } > > return eq; > > } > > @@ -443,23 +443,26 @@ > > } > > > if (typeof a === "object") { > > - // Verify properties equivalence in both ways: > > - > > - // Everything in a should be in b and equivalent and ... > > - for (var i in a) { > > - if (a.hasOwnProperty(i)) { > > - eq = eq && equiv(a[i], b[i]); > > - } > > - } > > - > > - // ... everything in b should be in a and equivalent > > - for (var i in b) { > > - if (b.hasOwnProperty(i)) { > > - eq = eq && equiv(b[i], a[i]); > > - } > > - } > > - > > - return eq; > > + // With Markus Staab's help > > + // > > seehttp://groups.google.com/group/jquery-dev/browse_thread/thread/9447a9... > > + > > + // Verify a's properties with b's properties equivalence > > + for (i in a) { > > + if (a.hasOwnProperty(i)) { > > + if (!b.hasOwnProperty(i) || !equiv(a[i], b[i])) > > { > > + return false; > > + } > > + } > > + } > > + > > + // Need only to verify that b's property are also a's > > property > > + for (i in b) { > > + if (b.hasOwnProperty(i) && !a.hasOwnProperty(i)) { > > + return false; > > + } > > + } > > + > > + return true; > > } > > > if (typeof a === "function") { > > > missed a few lines of code. > > > On 22 Okt., 14:53, "markus.staab" <[EMAIL PROTECTED]> wrote: > >> Hi Jörn, > > >> here it is: > > >> Index: testrunner.js > >> =================================================================== > >> --- testrunner.js (revision 5903) > >> +++ testrunner.js (working copy) > >> @@ -428,8 +428,8 @@ > >> if (len !== b.length) { // safe and faster > >> return false; > >> } > >> - for (var i = 0; i < len; i++) { > >> - eq = eq && equiv(a[i], b[i]); > >> + for (var i = 0; i < len && eq; i++) { > >> + eq = equiv(a[i], b[i]); > >> } > >> return eq; > >> } > >> @@ -443,23 +443,26 @@ > >> } > > >> if (typeof a === "object") { > >> - // Verify properties equivalence in both ways: > >> - > >> - // Everything in a should be in b and equivalent and ... > >> - for (var i in a) { > >> - if (a.hasOwnProperty(i)) { > >> - eq = eq && equiv(a[i], b[i]); > >> - } > >> - } > >> - > >> - // ... everything in b should be in a and equivalent > >> - for (var i in b) { > >> - if (b.hasOwnProperty(i)) { > >> - eq = eq && equiv(b[i], a[i]); > >> - } > >> - } > >> - > >> - return eq; > >> + // With Markus Staab's help > >> + // > >> seehttp://groups.google.com/group/jquery-dev/browse_thread/thread/9447a9... > >> + > >> + // Verify a's properties with b's properties equivalence > >> + for (i in a) { > >> + if (a.hasOwnProperty(i)) { > >> + if (!b.hasOwnProperty(i) || !equiv(a[i], b[i])) > >> { > >> + return false; > >> + } > >> + } > >> + } > >> + > >> + // Need only to verify that b's property are also a's > >> property > >> + for (i in b) { > >> + if (b.hasOwnProperty(i) && !a.hasOwnProperty(i)) { > >> + return false; > >> + } > >> + } > >> + > >> + return true; > >> } > > >> if (typeof a === "function") { > > >> Bye, Markus > > >> On 22 Okt., 14:22, "Jörn Zaefferer" <[EMAIL PROTECTED]> > >> wrote: > > >> > I'm happy to commit whatever you guys deem useful for equiv and QUnit. > >> > A patch is perfect, that way I know that it isn't just code you were > >> > trying out. > > >> > Thanks > >> > Jörn > > >> > On Wed, Oct 22, 2008 at 2:23 PM, Philippe Rathe <[EMAIL PROTECTED]> > >> > wrote: > > >> > > Thanks Markus. > >> > > That was a nice optimization. All tests passed. > >> > > It will surely be patch in QUnit soon. > > >> > > By the way you can download the testsuites and the sources > >> > > :http://philrathe.com/projects/equiv > >> > > Download the archive. It is always to latest. > > >> > > Philippe Rathé > > >> > > On 22-Oct-08, at 5:42 AM, markus.staab wrote: > > >> > >> the first loop has a problem: > > >> > >> it should read > > >> > >> // Everything in a should be in b and equivalent and ... > >> > >> for (var i in a) { > >> > >> if(a.hasOwnProperty(i)) > >> > >> { > >> > >> if (!b.hasOwnProperty(i) || !equiv(a[i], > >> > >> b[i])) > >> > >> { > >> > >> return false; > >> > >> } > >> > >> } > >> > >> } > > >> > >> this approach would also save the memory for the 2 property stacks you > >> > >> use in your latest solution. > > >> > >> On 22 Okt., 11:35, "markus.staab" <[EMAIL PROTECTED]> wrote: > >> > >>> i came up with another idea: > > >> > >>> // Everything in a should be in b and equivalent and ... > >> > >>> for (var i in a) { > >> > >>> if (!(a.hasOwnProperty(i) && > >> > >>> b.hasOwnProperty(i) && > >> > >>> equiv(a[i], b[i]))) { > >> > >>> return false; > >> > >>> } > >> > >>> } > > >> > >>> // is there any property in b left, which doesn't exist > >> > >>> in > >> > >>> a? > >> > >>> for (var i in b) { > >> > >>> if (b.hasOwnProperty(i) && !a.hasOwnProperty(i)) { > >> > >>> return false; > >> > >>> } > >> > >>> } > > >> > >>> maybe you can give it a try and also perform a benchmark (maybe you > >> > >>> could share your test and benchmark, so I can also test my ideas on > >> > >>> my > >> > >>> machine...) > > >> > >>> bye, markus > > >> > >>> On 22 Okt., 11:14, "markus.staab" <[EMAIL PROTECTED]> wrote: > > >> > >>>> hi Philippe, > > >> > >>>> in your new code you are doing the following: > > >> > >>>> 50 // Stack all property names for a last minute > >> > >>>> check for > >> > >>>> two good reasons: > >> > >>>> 51 // 1) To prevent failing when comparing > >> > >>>> 52 // a property that have an undefined value > >> > >>>> 53 // with a property that do not exists. > >> > >>>> 54 // 2) To allow verifying equivalence in one > >> > >>>> way (a -> > >> > >>>> b) > >> > >>>> 55 // and then comparing both property names > >> > >>>> to > >> > >>>> replace > >> > >>>> 56 // (b -> a) processing. It's faster. > >> > >>>> 57 var aProperties = [], bProperties = []; > >> > >>>> 58 > >> > >>>> 59 // Verify a's properties with b's properties > >> > >>>> 60 for (i in a) { > >> > >>>> 61 if (eq) { > >> > >>>> 62 if (a.hasOwnProperty(i)) { > >> > >>>> 63 aProperties.push(i); > >> > >>>> 64 eq = equiv(a[i], b[i]); > >> > >>>> 65 } > >> > >>>> 66 } else { > >> > >>>> 67 return false; > >> > >>>> 68 } > >> > >>>> 69 } > >> > >>>> 70 > >> > >>>> 71 // Get only b's property names > >> > >>>> 72 if (eq) { > >> > >>>> 73 for (i in b) { > >> > >>>> 74 if (b.hasOwnProperty(i)) { > >> > >>>> 75 bProperties.push(i); > >> > >>>> 76 } > >> > >>>> 77 } > >> > >>>> 78 } > >> > >>>> 79 > >> > >>>> 80 // Finally, ensures also the same property > >> > >>>> names in > >> > >>>> both ways. > >> > >>>> 81 // That will also ensures that no property with > >> > >>>> undefined value is left behind. > >> > >>>> 82 return eq && equiv(aProperties, bProperties); > > >> > >>>> in this you compare the properties from a and b twice. line 64 > >> > >>>> should > >> > >>>> be deleted. the properties are compared in the next recursion > >> > >>>> anyway. > >> > >>>> make the 2 "for (x in y)"-loops less complex and only collect the > >> > >>>> properties. but then it would be optimized for the "eqiv"-case. > > >> > >>>> On 21 Okt., 22:55, Philippe Rathe <[EMAIL PROTECTED]> wrote: > > >> > >>>>> Please don't use that patch because it breaks the QUnit equiv test > > ... > > Erfahren Sie mehr » --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---
