| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421 | 
							- module("equiv");
 
- test("Primitive types and constants", function () {
 
-     equals(QUnit.equiv(null, null), true, "null");
 
-     equals(QUnit.equiv(null, {}), false, "null");
 
-     equals(QUnit.equiv(null, undefined), false, "null");
 
-     equals(QUnit.equiv(null, 0), false, "null");
 
-     equals(QUnit.equiv(null, false), false, "null");
 
-     equals(QUnit.equiv(null, ''), false, "null");
 
-     equals(QUnit.equiv(null, []), false, "null");
 
-     equals(QUnit.equiv(undefined, undefined), true, "undefined");
 
-     equals(QUnit.equiv(undefined, null), false, "undefined");
 
-     equals(QUnit.equiv(undefined, 0), false, "undefined");
 
-     equals(QUnit.equiv(undefined, false), false, "undefined");
 
-     equals(QUnit.equiv(undefined, {}), false, "undefined");
 
-     equals(QUnit.equiv(undefined, []), false, "undefined");
 
-     equals(QUnit.equiv(undefined, ""), false, "undefined");
 
-     // Nan usually doest not equal to Nan using the '==' operator.
 
-     // Only isNaN() is able to do it.
 
-     equals(QUnit.equiv(0/0, 0/0), true, "NaN"); // NaN VS NaN
 
-     equals(QUnit.equiv(1/0, 2/0), true, "Infinity"); // Infinity VS Infinity
 
-     equals(QUnit.equiv(-1/0, 2/0), false, "-Infinity, Infinity"); // -Infinity VS Infinity
 
-     equals(QUnit.equiv(-1/0, -2/0), true, "-Infinity, -Infinity"); // -Infinity VS -Infinity
 
-     equals(QUnit.equiv(0/0, 1/0), false, "NaN, Infinity"); // Nan VS Infinity
 
-     equals(QUnit.equiv(1/0, 0/0), false, "NaN, Infinity"); // Nan VS Infinity
 
-     equals(QUnit.equiv(0/0, null), false, "NaN");
 
-     equals(QUnit.equiv(0/0, undefined), false, "NaN");
 
-     equals(QUnit.equiv(0/0, 0), false, "NaN");
 
-     equals(QUnit.equiv(0/0, false), false, "NaN");
 
-     equals(QUnit.equiv(0/0, function () {}), false, "NaN");
 
-     equals(QUnit.equiv(1/0, null), false, "NaN, Infinity");
 
-     equals(QUnit.equiv(1/0, undefined), false, "NaN, Infinity");
 
-     equals(QUnit.equiv(1/0, 0), false, "NaN, Infinity");
 
-     equals(QUnit.equiv(1/0, 1), false, "NaN, Infinity");
 
-     equals(QUnit.equiv(1/0, false), false, "NaN, Infinity");
 
-     equals(QUnit.equiv(1/0, true), false, "NaN, Infinity");
 
-     equals(QUnit.equiv(1/0, function () {}), false, "NaN, Infinity");
 
-     equals(QUnit.equiv(0, 0), true, "number");
 
-     equals(QUnit.equiv(0, 1), false, "number");
 
-     equals(QUnit.equiv(1, 0), false, "number");
 
-     equals(QUnit.equiv(1, 1), true, "number");
 
-     equals(QUnit.equiv(1.1, 1.1), true, "number");
 
-     equals(QUnit.equiv(0.0000005, 0.0000005), true, "number");
 
-     equals(QUnit.equiv(0, ''), false, "number");
 
-     equals(QUnit.equiv(0, '0'), false, "number");
 
-     equals(QUnit.equiv(1, '1'), false, "number");
 
-     equals(QUnit.equiv(0, false), false, "number");
 
-     equals(QUnit.equiv(1, true), false, "number");
 
-     equals(QUnit.equiv(true, true), true, "boolean");
 
-     equals(QUnit.equiv(true, false), false, "boolean");
 
-     equals(QUnit.equiv(false, true), false, "boolean");
 
-     equals(QUnit.equiv(false, 0), false, "boolean");
 
-     equals(QUnit.equiv(false, null), false, "boolean");
 
-     equals(QUnit.equiv(false, undefined), false, "boolean");
 
-     equals(QUnit.equiv(true, 1), false, "boolean");
 
-     equals(QUnit.equiv(true, null), false, "boolean");
 
-     equals(QUnit.equiv(true, undefined), false, "boolean");
 
-     equals(QUnit.equiv('', ''), true, "string");
 
-     equals(QUnit.equiv('a', 'a'), true, "string");
 
-     equals(QUnit.equiv("foobar", "foobar"), true, "string");
 
-     equals(QUnit.equiv("foobar", "foo"), false, "string");
 
-     equals(QUnit.equiv('', 0), false, "string");
 
-     equals(QUnit.equiv('', false), false, "string");
 
-     equals(QUnit.equiv('', null), false, "string");
 
-     equals(QUnit.equiv('', undefined), false, "string");
 
-     // Short annotation VS new annotation
 
-     equals(QUnit.equiv(0, new Number()), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(new Number(), 0), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(1, new Number(1)), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(new Number(1), 1), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(new Number(0), 1), false, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(0, new Number(1)), false, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(new String(), ""), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv("", new String()), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(new String("My String"), "My String"), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv("My String", new String("My String")), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv("Bad String", new String("My String")), false, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(new String("Bad String"), "My String"), false, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(false, new Boolean()), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(new Boolean(), false), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(true, new Boolean(true)), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(new Boolean(true), true), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(true, new Boolean(1)), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(false, new Boolean(false)), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(new Boolean(false), false), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(false, new Boolean(0)), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(true, new Boolean(false)), false, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(new Boolean(false), true), false, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(new Object(), {}), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv({}, new Object()), true, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(new Object(), {a:1}), false, "short annotation VS new annotation");
 
-     equals(QUnit.equiv({a:1}, new Object()), false, "short annotation VS new annotation");
 
-     equals(QUnit.equiv({a:undefined}, new Object()), false, "short annotation VS new annotation");
 
-     equals(QUnit.equiv(new Object(), {a:undefined}), false, "short annotation VS new annotation");
 
- });
 
- test("Objects Basics.", function() {
 
-     equals(QUnit.equiv({}, {}), true);
 
-     equals(QUnit.equiv({}, null), false);
 
-     equals(QUnit.equiv({}, undefined), false);
 
-     equals(QUnit.equiv({}, 0), false);
 
-     equals(QUnit.equiv({}, false), false);
 
-     // This test is a hard one, it is very important
 
-     // REASONS:
 
-     //      1) They are of the same type "object"
 
-     //      2) [] instanceof Object is true
 
-     //      3) Their properties are the same (doesn't exists)
 
-     equals(QUnit.equiv({}, []), false);
 
-     equals(QUnit.equiv({a:1}, {a:1}), true);
 
-     equals(QUnit.equiv({a:1}, {a:"1"}), false);
 
-     equals(QUnit.equiv({a:[]}, {a:[]}), true);
 
-     equals(QUnit.equiv({a:{}}, {a:null}), false);
 
-     equals(QUnit.equiv({a:1}, {}), false);
 
-     equals(QUnit.equiv({}, {a:1}), false);
 
-     // Hard ones
 
-     equals(QUnit.equiv({a:undefined}, {}), false);
 
-     equals(QUnit.equiv({}, {a:undefined}), false);
 
-     equals(QUnit.equiv(
 
-         {
 
-             a: [{ bar: undefined }]
 
-         },
 
-         {
 
-             a: [{ bat: undefined }]
 
-         }
 
-     ), false);
 
- });
 
- test("Arrays Basics.", function() {
 
-     equals(QUnit.equiv([], []), true);
 
-     // May be a hard one, can invoke a crash at execution.
 
-     // because their types are both "object" but null isn't
 
-     // like a true object, it doesn't have any property at all.
 
-     equals(QUnit.equiv([], null), false);
 
-     equals(QUnit.equiv([], undefined), false);
 
-     equals(QUnit.equiv([], false), false);
 
-     equals(QUnit.equiv([], 0), false);
 
-     equals(QUnit.equiv([], ""), false);
 
-     // May be a hard one, but less hard
 
-     // than {} with [] (note the order)
 
-     equals(QUnit.equiv([], {}), false);
 
-     equals(QUnit.equiv([null],[]), false);
 
-     equals(QUnit.equiv([undefined],[]), false);
 
-     equals(QUnit.equiv([],[null]), false);
 
-     equals(QUnit.equiv([],[undefined]), false);
 
-     equals(QUnit.equiv([null],[undefined]), false);
 
-     equals(QUnit.equiv([[]],[[]]), true);
 
-     equals(QUnit.equiv([[],[],[]],[[],[],[]]), true);
 
-     equals(QUnit.equiv(
 
-                             [[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]],
 
-                             [[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]),
 
-                             true);
 
-     equals(QUnit.equiv(
 
-                             [[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]],
 
-                             [[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]), // shorter
 
-                             false);
 
-     equals(QUnit.equiv(
 
-                             [[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]],
 
-                             [[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]), // deepest element not an array
 
-                             false);
 
-     // same multidimensional
 
-     equals(QUnit.equiv(
 
-                             [1,2,3,4,5,6,7,8,9, [
 
-                                 1,2,3,4,5,6,7,8,9, [
 
-                                     1,2,3,4,5,[
 
-                                         [6,7,8,9, [
 
-                                             [
 
-                                                 1,2,3,4,[
 
-                                                     2,3,4,[
 
-                                                         1,2,[
 
-                                                             1,2,3,4,[
 
-                                                                 1,2,3,4,5,6,7,8,9,[
 
-                                                                     0
 
-                                                                 ],1,2,3,4,5,6,7,8,9
 
-                                                             ],5,6,7,8,9
 
-                                                         ],4,5,6,7,8,9
 
-                                                     ],5,6,7,8,9
 
-                                                 ],5,6,7
 
-                                             ]
 
-                                         ]
 
-                                     ]
 
-                                 ]
 
-                             ]]],
 
-                             [1,2,3,4,5,6,7,8,9, [
 
-                                 1,2,3,4,5,6,7,8,9, [
 
-                                     1,2,3,4,5,[
 
-                                         [6,7,8,9, [
 
-                                             [
 
-                                                 1,2,3,4,[
 
-                                                     2,3,4,[
 
-                                                         1,2,[
 
-                                                             1,2,3,4,[
 
-                                                                 1,2,3,4,5,6,7,8,9,[
 
-                                                                     0
 
-                                                                 ],1,2,3,4,5,6,7,8,9
 
-                                                             ],5,6,7,8,9
 
-                                                         ],4,5,6,7,8,9
 
-                                                     ],5,6,7,8,9
 
-                                                 ],5,6,7
 
-                                             ]
 
-                                         ]
 
-                                     ]
 
-                                 ]
 
-                             ]]]),
 
-                             true, "Multidimensional");
 
-     // different multidimensional
 
-     equals(QUnit.equiv(
 
-                             [1,2,3,4,5,6,7,8,9, [
 
-                                 1,2,3,4,5,6,7,8,9, [
 
-                                     1,2,3,4,5,[
 
-                                         [6,7,8,9, [
 
-                                             [
 
-                                                 1,2,3,4,[
 
-                                                     2,3,4,[
 
-                                                         1,2,[
 
-                                                             1,2,3,4,[
 
-                                                                 1,2,3,4,5,6,7,8,9,[
 
-                                                                     0
 
-                                                                 ],1,2,3,4,5,6,7,8,9
 
-                                                             ],5,6,7,8,9
 
-                                                         ],4,5,6,7,8,9
 
-                                                     ],5,6,7,8,9
 
-                                                 ],5,6,7
 
-                                             ]
 
-                                         ]
 
-                                     ]
 
-                                 ]
 
-                             ]]],
 
-                             [1,2,3,4,5,6,7,8,9, [
 
-                                 1,2,3,4,5,6,7,8,9, [
 
-                                     1,2,3,4,5,[
 
-                                         [6,7,8,9, [
 
-                                             [
 
-                                                 1,2,3,4,[
 
-                                                     2,3,4,[
 
-                                                         1,2,[
 
-                                                             '1',2,3,4,[                 // string instead of number
 
-                                                                 1,2,3,4,5,6,7,8,9,[
 
-                                                                     0
 
-                                                                 ],1,2,3,4,5,6,7,8,9
 
-                                                             ],5,6,7,8,9
 
-                                                         ],4,5,6,7,8,9
 
-                                                     ],5,6,7,8,9
 
-                                                 ],5,6,7
 
-                                             ]
 
-                                         ]
 
-                                     ]
 
-                                 ]
 
-                             ]]]),
 
-                             false, "Multidimensional");
 
-     // different multidimensional
 
-     equals(QUnit.equiv(
 
-                             [1,2,3,4,5,6,7,8,9, [
 
-                                 1,2,3,4,5,6,7,8,9, [
 
-                                     1,2,3,4,5,[
 
-                                         [6,7,8,9, [
 
-                                             [
 
-                                                 1,2,3,4,[
 
-                                                     2,3,4,[
 
-                                                         1,2,[
 
-                                                             1,2,3,4,[
 
-                                                                 1,2,3,4,5,6,7,8,9,[
 
-                                                                     0
 
-                                                                 ],1,2,3,4,5,6,7,8,9
 
-                                                             ],5,6,7,8,9
 
-                                                         ],4,5,6,7,8,9
 
-                                                     ],5,6,7,8,9
 
-                                                 ],5,6,7
 
-                                             ]
 
-                                         ]
 
-                                     ]
 
-                                 ]
 
-                             ]]],
 
-                             [1,2,3,4,5,6,7,8,9, [
 
-                                 1,2,3,4,5,6,7,8,9, [
 
-                                     1,2,3,4,5,[
 
-                                         [6,7,8,9, [
 
-                                             [
 
-                                                 1,2,3,4,[
 
-                                                     2,3,[                   // missing an element (4)
 
-                                                         1,2,[
 
-                                                             1,2,3,4,[
 
-                                                                 1,2,3,4,5,6,7,8,9,[
 
-                                                                     0
 
-                                                                 ],1,2,3,4,5,6,7,8,9
 
-                                                             ],5,6,7,8,9
 
-                                                         ],4,5,6,7,8,9
 
-                                                     ],5,6,7,8,9
 
-                                                 ],5,6,7
 
-                                             ]
 
-                                         ]
 
-                                     ]
 
-                                 ]
 
-                             ]]]),
 
-                             false, "Multidimensional");
 
- });
 
- test("Functions.", function() {
 
-     var f0 = function () {};
 
-     var f1 = function () {};
 
-     // f2 and f3 have the same code, formatted differently
 
-     var f2 = function () {var i = 0;};
 
-     var f3 = function () {
 
-         var i = 0 // this comment and no semicoma as difference
 
-     };
 
-     equals(QUnit.equiv(function() {}, function() {}), false, "Anonymous functions"); // exact source code
 
-     equals(QUnit.equiv(function() {}, function() {return true;}), false, "Anonymous functions");
 
-     equals(QUnit.equiv(f0, f0), true, "Function references"); // same references
 
-     equals(QUnit.equiv(f0, f1), false, "Function references"); // exact source code, different references
 
-     equals(QUnit.equiv(f2, f3), false, "Function references"); // equivalent source code, different references
 
-     equals(QUnit.equiv(f1, f2), false, "Function references"); // different source code, different references
 
-     equals(QUnit.equiv(function() {}, true), false);
 
-     equals(QUnit.equiv(function() {}, undefined), false);
 
-     equals(QUnit.equiv(function() {}, null), false);
 
-     equals(QUnit.equiv(function() {}, {}), false);
 
- });
 
- test("Date instances.", function() {
 
-     // Date, we don't need to test Date.parse() because it returns a number.
 
-     // Only test the Date instances by setting them a fix date.
 
-     // The date use is midnight January 1, 1970
 
-     var d1 = new Date();
 
-     d1.setTime(0); // fix the date
 
-     var d2 = new Date();
 
-     d2.setTime(0); // fix the date
 
-     var d3 = new Date(); // The very now
 
-     // Anyway their types differs, just in case the code fails in the order in which it deals with date
 
-     equals(QUnit.equiv(d1, 0), false); // d1.valueOf() returns 0, but d1 and 0 are different
 
-     // test same values date and different instances equality
 
-     equals(QUnit.equiv(d1, d2), true);
 
-     // test different date and different instances difference
 
-     equals(QUnit.equiv(d1, d3), false);
 
- });
 
- test("RegExp.", function() {
 
-     // Must test cases that imply those traps:
 
-     // var a = /./;
 
-     // a instanceof Object;        // Oops
 
-     // a instanceof RegExp;        // Oops
 
-     // typeof a === "function";    // Oops, false in IE and Opera, true in FF and Safari ("object")
 
-     // Tests same regex with same modifiers in different order
 
-     var r = /foo/;
 
-     var r5 = /foo/gim;
 
-     var r6 = /foo/gmi;
 
-     var r7 = /foo/igm;
 
-     var r8 = /foo/img;
 
-     var r9 = /foo/mig;
 
-     var r10 = /foo/mgi;
 
-     var ri1 = /foo/i;
 
-     var ri2 = /foo/i;
 
-     var rm1 = /foo/m;
 
-     var rm2 = /foo/m;
 
-     var rg1 = /foo/g;
 
-     var rg2 = /foo/g;
 
-     equals(QUnit.equiv(r5, r6), true, "Modifier order");
 
-     equals(QUnit.equiv(r5, r7), true, "Modifier order");
 
-     equals(QUnit.equiv(r5, r8), true, "Modifier order");
 
-     equals(QUnit.equiv(r5, r9), true, "Modifier order");
 
-     equals(QUnit.equiv(r5, r10), true, "Modifier order");
 
-     equals(QUnit.equiv(r, r5), false, "Modifier");
 
-     equals(QUnit.equiv(ri1, ri2), true, "Modifier");
 
-     equals(QUnit.equiv(r, ri1), false, "Modifier");
 
-     equals(QUnit.equiv(ri1, rm1), false, "Modifier");
 
-     equals(QUnit.equiv(r, rm1), false, "Modifier");
 
-     equals(QUnit.equiv(rm1, ri1), false, "Modifier");
 
-     equals(QUnit.equiv(rm1, rm2), true, "Modifier");
 
-     equals(QUnit.equiv(rg1, rm1), false, "Modifier");
 
-     equals(QUnit.equiv(rm1, rg1), false, "Modifier");
 
-     equals(QUnit.equiv(rg1, rg2), true, "Modifier");
 
-     // Different regex, same modifiers
 
-     var r11 = /[a-z]/gi;
 
-     var r13 = /[0-9]/gi; // oops! different
 
-     equals(QUnit.equiv(r11, r13), false, "Regex pattern");
 
-     var r14 = /0/ig;
 
-     var r15 = /"0"/ig; // oops! different
 
-     equals(QUnit.equiv(r14, r15), false, "Regex pattern");
 
-     var r1 = /[\n\r\u2028\u2029]/g;
 
-     var r2 = /[\n\r\u2028\u2029]/g;
 
-     var r3 = /[\n\r\u2028\u2028]/g; // differs from r1
 
-     var r4 = /[\n\r\u2028\u2029]/;  // differs from r1
 
-     equals(QUnit.equiv(r1, r2), true, "Regex pattern");
 
-     equals(QUnit.equiv(r1, r3), false, "Regex pattern");
 
-     equals(QUnit.equiv(r1, r4), false, "Regex pattern");
 
-     // More complex regex
 
-     var regex1 = "^[-_.a-z0-9]+@([-_a-z0-9]+\\.)+([A-Za-z][A-Za-z]|[A-Za-z][A-Za-z][A-Za-z])|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$";
 
-     var regex2 = "^[-_.a-z0-9]+@([-_a-z0-9]+\\.)+([A-Za-z][A-Za-z]|[A-Za-z][A-Za-z][A-Za-z])|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$";
 
-     // regex 3 is different: '.' not escaped
 
-     var regex3 = "^[-_.a-z0-9]+@([-_a-z0-9]+.)+([A-Za-z][A-Za-z]|[A-Za-z][A-Za-z][A-Za-z])|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$";
 
-     var r21 = new RegExp(regex1);
 
-     var r22 = new RegExp(regex2);
 
-     var r23 = new RegExp(regex3); // diff from r21, not same pattern
 
-     var r23a = new RegExp(regex3, "gi"); // diff from r23, not same modifier
 
-     var r24a = new RegExp(regex3, "ig"); // same as r23a
 
-     equals(QUnit.equiv(r21, r22), true, "Complex Regex");
 
-     equals(QUnit.equiv(r21, r23), false, "Complex Regex");
 
-     equals(QUnit.equiv(r23, r23a), false, "Complex Regex");
 
-     equals(QUnit.equiv(r23a, r24a), true, "Complex Regex");
 
-     // typeof r1 is "function" in some browsers and "object" in others so we must cover this test
 
-     var re = / /;
 
-     equals(QUnit.equiv(re, function () {}), false, "Regex internal");
 
-     equals(QUnit.equiv(re, {}), false, "Regex internal");
 
- });
 
- test("Complex Objects.", function() {
 
-     function fn1() {
 
-         return "fn1";
 
-     }
 
-     function fn2() {
 
-         return "fn2";
 
-     }
 
-     // Try to invert the order of some properties to make sure it is covered.
 
-     // It can failed when properties are compared between unsorted arrays.
 
-     equals(QUnit.equiv(
 
-         {
 
-             a: 1,
 
-             b: null,
 
-             c: [{}],
 
-             d: {
 
-                 a: 3.14159,
 
-                 b: false,
 
-                 c: {
 
-                     e: fn1,
 
-                     f: [[[]]],
 
-                     g: {
 
-                         j: {
 
-                             k: {
 
-                                 n: {
 
-                                     r: "r",
 
-                                     s: [1,2,3],
 
-                                     t: undefined,
 
-                                     u: 0,
 
-                                     v: {
 
-                                         w: {
 
-                                             x: {
 
-                                                 y: "Yahoo!",
 
-                                                 z: null
 
-                                             }
 
-                                         }
 
-                                     }
 
-                                 },
 
-                                 q: [],
 
-                                 p: 1/0,
 
-                                 o: 99
 
-                             },
 
-                             l: undefined,
 
-                             m: null
 
-                         }
 
-                     },
 
-                     d: 0,
 
-                     i: true,
 
-                     h: "false"
 
-                 }
 
-             },
 
-             e: undefined,
 
-             g: "",
 
-             h: "h",
 
-             f: {},
 
-             i: []
 
-         },
 
-         {
 
-             a: 1,
 
-             b: null,
 
-             c: [{}],
 
-             d: {
 
-                 b: false,
 
-                 a: 3.14159,
 
-                 c: {
 
-                     d: 0,
 
-                     e: fn1,
 
-                     f: [[[]]],
 
-                     g: {
 
-                         j: {
 
-                             k: {
 
-                                 n: {
 
-                                     r: "r",
 
-                                     t: undefined,
 
-                                     u: 0,
 
-                                     s: [1,2,3],
 
-                                     v: {
 
-                                         w: {
 
-                                             x: {
 
-                                                 z: null,
 
-                                                 y: "Yahoo!"
 
-                                             }
 
-                                         }
 
-                                     }
 
-                                 },
 
-                                 o: 99,
 
-                                 p: 1/0,
 
-                                 q: []
 
-                             },
 
-                             l: undefined,
 
-                             m: null
 
-                         }
 
-                     },
 
-                     i: true,
 
-                     h: "false"
 
-                 }
 
-             },
 
-             e: undefined,
 
-             g: "",
 
-             f: {},
 
-             h: "h",
 
-             i: []
 
-         }
 
-     ), true);
 
-     equals(QUnit.equiv(
 
-         {
 
-             a: 1,
 
-             b: null,
 
-             c: [{}],
 
-             d: {
 
-                 a: 3.14159,
 
-                 b: false,
 
-                 c: {
 
-                     d: 0,
 
-                     e: fn1,
 
-                     f: [[[]]],
 
-                     g: {
 
-                         j: {
 
-                             k: {
 
-                                 n: {
 
-                                     //r: "r",   // different: missing a property
 
-                                     s: [1,2,3],
 
-                                     t: undefined,
 
-                                     u: 0,
 
-                                     v: {
 
-                                         w: {
 
-                                             x: {
 
-                                                 y: "Yahoo!",
 
-                                                 z: null
 
-                                             }
 
-                                         }
 
-                                     }
 
-                                 },
 
-                                 o: 99,
 
-                                 p: 1/0,
 
-                                 q: []
 
-                             },
 
-                             l: undefined,
 
-                             m: null
 
-                         }
 
-                     },
 
-                     h: "false",
 
-                     i: true
 
-                 }
 
-             },
 
-             e: undefined,
 
-             f: {},
 
-             g: "",
 
-             h: "h",
 
-             i: []
 
-         },
 
-         {
 
-             a: 1,
 
-             b: null,
 
-             c: [{}],
 
-             d: {
 
-                 a: 3.14159,
 
-                 b: false,
 
-                 c: {
 
-                     d: 0,
 
-                     e: fn1,
 
-                     f: [[[]]],
 
-                     g: {
 
-                         j: {
 
-                             k: {
 
-                                 n: {
 
-                                     r: "r",
 
-                                     s: [1,2,3],
 
-                                     t: undefined,
 
-                                     u: 0,
 
-                                     v: {
 
-                                         w: {
 
-                                             x: {
 
-                                                 y: "Yahoo!",
 
-                                                 z: null
 
-                                             }
 
-                                         }
 
-                                     }
 
-                                 },
 
-                                 o: 99,
 
-                                 p: 1/0,
 
-                                 q: []
 
-                             },
 
-                             l: undefined,
 
-                             m: null
 
-                         }
 
-                     },
 
-                     h: "false",
 
-                     i: true
 
-                 }
 
-             },
 
-             e: undefined,
 
-             f: {},
 
-             g: "",
 
-             h: "h",
 
-             i: []
 
-         }
 
-     ), false);
 
-     equals(QUnit.equiv(
 
-         {
 
-             a: 1,
 
-             b: null,
 
-             c: [{}],
 
-             d: {
 
-                 a: 3.14159,
 
-                 b: false,
 
-                 c: {
 
-                     d: 0,
 
-                     e: fn1,
 
-                     f: [[[]]],
 
-                     g: {
 
-                         j: {
 
-                             k: {
 
-                                 n: {
 
-                                     r: "r",
 
-                                     s: [1,2,3],
 
-                                     t: undefined,
 
-                                     u: 0,
 
-                                     v: {
 
-                                         w: {
 
-                                             x: {
 
-                                                 y: "Yahoo!",
 
-                                                 z: null
 
-                                             }
 
-                                         }
 
-                                     }
 
-                                 },
 
-                                 o: 99,
 
-                                 p: 1/0,
 
-                                 q: []
 
-                             },
 
-                             l: undefined,
 
-                             m: null
 
-                         }
 
-                     },
 
-                     h: "false",
 
-                     i: true
 
-                 }
 
-             },
 
-             e: undefined,
 
-             f: {},
 
-             g: "",
 
-             h: "h",
 
-             i: []
 
-         },
 
-         {
 
-             a: 1,
 
-             b: null,
 
-             c: [{}],
 
-             d: {
 
-                 a: 3.14159,
 
-                 b: false,
 
-                 c: {
 
-                     d: 0,
 
-                     e: fn1,
 
-                     f: [[[]]],
 
-                     g: {
 
-                         j: {
 
-                             k: {
 
-                                 n: {
 
-                                     r: "r",
 
-                                     s: [1,2,3],
 
-                                     //t: undefined,                 // different: missing a property with an undefined value
 
-                                     u: 0,
 
-                                     v: {
 
-                                         w: {
 
-                                             x: {
 
-                                                 y: "Yahoo!",
 
-                                                 z: null
 
-                                             }
 
-                                         }
 
-                                     }
 
-                                 },
 
-                                 o: 99,
 
-                                 p: 1/0,
 
-                                 q: []
 
-                             },
 
-                             l: undefined,
 
-                             m: null
 
-                         }
 
-                     },
 
-                     h: "false",
 
-                     i: true
 
-                 }
 
-             },
 
-             e: undefined,
 
-             f: {},
 
-             g: "",
 
-             h: "h",
 
-             i: []
 
-         }
 
-     ), false);
 
-     equals(QUnit.equiv(
 
-         {
 
-             a: 1,
 
-             b: null,
 
-             c: [{}],
 
-             d: {
 
-                 a: 3.14159,
 
-                 b: false,
 
-                 c: {
 
-                     d: 0,
 
-                     e: fn1,
 
-                     f: [[[]]],
 
-                     g: {
 
-                         j: {
 
-                             k: {
 
-                                 n: {
 
-                                     r: "r",
 
-                                     s: [1,2,3],
 
-                                     t: undefined,
 
-                                     u: 0,
 
-                                     v: {
 
-                                         w: {
 
-                                             x: {
 
-                                                 y: "Yahoo!",
 
-                                                 z: null
 
-                                             }
 
-                                         }
 
-                                     }
 
-                                 },
 
-                                 o: 99,
 
-                                 p: 1/0,
 
-                                 q: []
 
-                             },
 
-                             l: undefined,
 
-                             m: null
 
-                         }
 
-                     },
 
-                     h: "false",
 
-                     i: true
 
-                 }
 
-             },
 
-             e: undefined,
 
-             f: {},
 
-             g: "",
 
-             h: "h",
 
-             i: []
 
-         },
 
-         {
 
-             a: 1,
 
-             b: null,
 
-             c: [{}],
 
-             d: {
 
-                 a: 3.14159,
 
-                 b: false,
 
-                 c: {
 
-                     d: 0,
 
-                     e: fn1,
 
-                     f: [[[]]],
 
-                     g: {
 
-                         j: {
 
-                             k: {
 
-                                 n: {
 
-                                     r: "r",
 
-                                     s: [1,2,3],
 
-                                     t: undefined,
 
-                                     u: 0,
 
-                                     v: {
 
-                                         w: {
 
-                                             x: {
 
-                                                 y: "Yahoo!",
 
-                                                 z: null
 
-                                             }
 
-                                         }
 
-                                     }
 
-                                 },
 
-                                 o: 99,
 
-                                 p: 1/0,
 
-                                 q: {}           // different was []
 
-                             },
 
-                             l: undefined,
 
-                             m: null
 
-                         }
 
-                     },
 
-                     h: "false",
 
-                     i: true
 
-                 }
 
-             },
 
-             e: undefined,
 
-             f: {},
 
-             g: "",
 
-             h: "h",
 
-             i: []
 
-         }
 
-     ), false);
 
-     var same1 = {
 
-         a: [
 
-             "string", null, 0, "1", 1, {
 
-                 prop: null,
 
-                 foo: [1,2,null,{}, [], [1,2,3]],
 
-                 bar: undefined
 
-             }, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
 
-         ],
 
-         unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
 
-         b: "b",
 
-         c: fn1
 
-     };
 
-     var same2 = {
 
-         a: [
 
-             "string", null, 0, "1", 1, {
 
-                 prop: null,
 
-                 foo: [1,2,null,{}, [], [1,2,3]],
 
-                 bar: undefined
 
-             }, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
 
-         ],
 
-         unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
 
-         b: "b",
 
-         c: fn1
 
-     };
 
-     var diff1 = {
 
-         a: [
 
-             "string", null, 0, "1", 1, {
 
-                 prop: null,
 
-                 foo: [1,2,null,{}, [], [1,2,3,4]], // different: 4 was add to the array
 
-                 bar: undefined
 
-             }, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
 
-         ],
 
-         unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
 
-         b: "b",
 
-         c: fn1
 
-     };
 
-     var diff2 = {
 
-         a: [
 
-             "string", null, 0, "1", 1, {
 
-                 prop: null,
 
-                 foo: [1,2,null,{}, [], [1,2,3]],
 
-                 newprop: undefined, // different: newprop was added
 
-                 bar: undefined
 
-             }, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
 
-         ],
 
-         unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
 
-         b: "b",
 
-         c: fn1
 
-     };
 
-     var diff3 = {
 
-         a: [
 
-             "string", null, 0, "1", 1, {
 
-                 prop: null,
 
-                 foo: [1,2,null,{}, [], [1,2,3]],
 
-                 bar: undefined
 
-             }, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ α" // different: missing last char
 
-         ],
 
-         unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
 
-         b: "b",
 
-         c: fn1
 
-     };
 
-     var diff4 = {
 
-         a: [
 
-             "string", null, 0, "1", 1, {
 
-                 prop: null,
 
-                 foo: [1,2,undefined,{}, [], [1,2,3]], // different: undefined instead of null
 
-                 bar: undefined
 
-             }, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
 
-         ],
 
-         unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
 
-         b: "b",
 
-         c: fn1
 
-     };
 
-     var diff5 = {
 
-         a: [
 
-             "string", null, 0, "1", 1, {
 
-                 prop: null,
 
-                 foo: [1,2,null,{}, [], [1,2,3]],
 
-                 bat: undefined // different: property name not "bar"
 
-             }, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
 
-         ],
 
-         unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
 
-         b: "b",
 
-         c: fn1
 
-     };
 
-     equals(QUnit.equiv(same1, same2), true);
 
-     equals(QUnit.equiv(same2, same1), true);
 
-     equals(QUnit.equiv(same2, diff1), false);
 
-     equals(QUnit.equiv(diff1, same2), false);
 
-     equals(QUnit.equiv(same1, diff1), false);
 
-     equals(QUnit.equiv(same1, diff2), false);
 
-     equals(QUnit.equiv(same1, diff3), false);
 
-     equals(QUnit.equiv(same1, diff3), false);
 
-     equals(QUnit.equiv(same1, diff4), false);
 
-     equals(QUnit.equiv(same1, diff5), false);
 
-     equals(QUnit.equiv(diff5, diff1), false);
 
- });
 
- test("Complex Arrays.", function() {
 
-     function fn() {
 
-     }
 
-     equals(QUnit.equiv(
 
-                 [1, 2, 3, true, {}, null, [
 
-                     {
 
-                         a: ["", '1', 0]
 
-                     },
 
-                     5, 6, 7
 
-                 ], "foo"],
 
-                 [1, 2, 3, true, {}, null, [
 
-                     {
 
-                         a: ["", '1', 0]
 
-                     },
 
-                     5, 6, 7
 
-                 ], "foo"]),
 
-             true);
 
-     equals(QUnit.equiv(
 
-                 [1, 2, 3, true, {}, null, [
 
-                     {
 
-                         a: ["", '1', 0]
 
-                     },
 
-                     5, 6, 7
 
-                 ], "foo"],
 
-                 [1, 2, 3, true, {}, null, [
 
-                     {
 
-                         b: ["", '1', 0]         // not same property name
 
-                     },
 
-                     5, 6, 7
 
-                 ], "foo"]),
 
-             false);
 
-     var a = [{
 
-         b: fn,
 
-         c: false,
 
-         "do": "reserved word",
 
-         "for": {
 
-             ar: [3,5,9,"hey!", [], {
 
-                 ar: [1,[
 
-                     3,4,6,9, null, [], []
 
-                 ]],
 
-                 e: fn,
 
-                 f: undefined
 
-             }]
 
-         },
 
-         e: 0.43445
 
-     }, 5, "string", 0, fn, false, null, undefined, 0, [
 
-         4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
 
-     ], [], [[[], "foo", null, {
 
-         n: 1/0,
 
-         z: {
 
-             a: [3,4,5,6,"yep!", undefined, undefined],
 
-             b: {}
 
-         }
 
-     }, {}]]];
 
-     equals(QUnit.equiv(a,
 
-             [{
 
-                 b: fn,
 
-                 c: false,
 
-                 "do": "reserved word",
 
-                 "for": {
 
-                     ar: [3,5,9,"hey!", [], {
 
-                         ar: [1,[
 
-                             3,4,6,9, null, [], []
 
-                         ]],
 
-                         e: fn,
 
-                         f: undefined
 
-                     }]
 
-                 },
 
-                 e: 0.43445
 
-             }, 5, "string", 0, fn, false, null, undefined, 0, [
 
-                 4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
 
-             ], [], [[[], "foo", null, {
 
-                 n: 1/0,
 
-                 z: {
 
-                     a: [3,4,5,6,"yep!", undefined, undefined],
 
-                     b: {}
 
-                 }
 
-             }, {}]]]), true);
 
-     equals(QUnit.equiv(a,
 
-             [{
 
-                 b: fn,
 
-                 c: false,
 
-                 "do": "reserved word",
 
-                 "for": {
 
-                     ar: [3,5,9,"hey!", [], {
 
-                         ar: [1,[
 
-                             3,4,6,9, null, [], []
 
-                         ]],
 
-                         e: fn,
 
-                         f: undefined
 
-                     }]
 
-                 },
 
-                 e: 0.43445
 
-             }, 5, "string", 0, fn, false, null, undefined, 0, [
 
-                 4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[2]]]], "3"], {}, 1/0    // different: [[[[[2]]]]] instead of [[[[[3]]]]]
 
-             ], [], [[[], "foo", null, {
 
-                 n: 1/0,
 
-                 z: {
 
-                     a: [3,4,5,6,"yep!", undefined, undefined],
 
-                     b: {}
 
-                 }
 
-             }, {}]]]), false);
 
-     equals(QUnit.equiv(a,
 
-             [{
 
-                 b: fn,
 
-                 c: false,
 
-                 "do": "reserved word",
 
-                 "for": {
 
-                     ar: [3,5,9,"hey!", [], {
 
-                         ar: [1,[
 
-                             3,4,6,9, null, [], []
 
-                         ]],
 
-                         e: fn,
 
-                         f: undefined
 
-                     }]
 
-                 },
 
-                 e: 0.43445
 
-             }, 5, "string", 0, fn, false, null, undefined, 0, [
 
-                 4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
 
-             ], [], [[[], "foo", null, {
 
-                 n: -1/0,                                                                // different, -Infinity instead of Infinity
 
-                 z: {
 
-                     a: [3,4,5,6,"yep!", undefined, undefined],
 
-                     b: {}
 
-                 }
 
-             }, {}]]]), false);
 
-     equals(QUnit.equiv(a,
 
-             [{
 
-                 b: fn,
 
-                 c: false,
 
-                 "do": "reserved word",
 
-                 "for": {
 
-                     ar: [3,5,9,"hey!", [], {
 
-                         ar: [1,[
 
-                             3,4,6,9, null, [], []
 
-                         ]],
 
-                         e: fn,
 
-                         f: undefined
 
-                     }]
 
-                 },
 
-                 e: 0.43445
 
-             }, 5, "string", 0, fn, false, null, undefined, 0, [
 
-                 4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
 
-             ], [], [[[], "foo", {                                                       // different: null is missing
 
-                 n: 1/0,
 
-                 z: {
 
-                     a: [3,4,5,6,"yep!", undefined, undefined],
 
-                     b: {}
 
-                 }
 
-             }, {}]]]), false);
 
-     equals(QUnit.equiv(a,
 
-             [{
 
-                 b: fn,
 
-                 c: false,
 
-                 "do": "reserved word",
 
-                 "for": {
 
-                     ar: [3,5,9,"hey!", [], {
 
-                         ar: [1,[
 
-                             3,4,6,9, null, [], []
 
-                         ]],
 
-                         e: fn
 
-                                                                                 // different: missing property f: undefined
 
-                     }]
 
-                 },
 
-                 e: 0.43445
 
-             }, 5, "string", 0, fn, false, null, undefined, 0, [
 
-                 4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
 
-             ], [], [[[], "foo", null, {
 
-                 n: 1/0,
 
-                 z: {
 
-                     a: [3,4,5,6,"yep!", undefined, undefined],
 
-                     b: {}
 
-                 }
 
-             }, {}]]]), false);
 
- });
 
- test("Prototypal inheritance", function() {
 
-     function Gizmo(id) {
 
-         this.id = id;
 
-     }
 
-     function Hoozit(id) {
 
-         this.id = id;
 
-     }
 
-     Hoozit.prototype = new Gizmo();
 
-     var gizmo = new Gizmo("ok");
 
-     var hoozit = new Hoozit("ok");
 
-     // Try this test many times after test on instances that hold function
 
-     // to make sure that our code does not mess with last object constructor memoization.
 
-     equals(QUnit.equiv(function () {}, function () {}), false);
 
-     // Hoozit inherit from Gizmo
 
-     // hoozit instanceof Hoozit; // true
 
-     // hoozit instanceof Gizmo; // true
 
-     equals(QUnit.equiv(hoozit, gizmo), true);
 
-     Gizmo.prototype.bar = true; // not a function just in case we skip them
 
-     // Hoozit inherit from Gizmo
 
-     // They are equivalent
 
-     equals(QUnit.equiv(hoozit, gizmo), true);
 
-     // Make sure this is still true !important
 
-     // The reason for this is that I forgot to reset the last
 
-     // caller to where it were called from.
 
-     equals(QUnit.equiv(function () {}, function () {}), false);
 
-     // Make sure this is still true !important
 
-     equals(QUnit.equiv(hoozit, gizmo), true);
 
-     Hoozit.prototype.foo = true; // not a function just in case we skip them
 
-     // Gizmo does not inherit from Hoozit
 
-     // gizmo instanceof Gizmo; // true
 
-     // gizmo instanceof Hoozit; // false
 
-     // They are not equivalent
 
-     equals(QUnit.equiv(hoozit, gizmo), false);
 
-     // Make sure this is still true !important
 
-     equals(QUnit.equiv(function () {}, function () {}), false);
 
- });
 
- test("Instances", function() {
 
-     function A() {}
 
-     var a1 = new A();
 
-     var a2 = new A();
 
-     function B() {
 
-         this.fn = function () {};
 
-     }
 
-     var b1 = new B();
 
-     var b2 = new B();
 
-     equals(QUnit.equiv(a1, a2), true, "Same property, same constructor");
 
-     // b1.fn and b2.fn are functions but they are different references
 
-     // But we decided to skip function for instances.
 
-     equals(QUnit.equiv(b1, b2), true, "Same property, same constructor");
 
-     equals(QUnit.equiv(a1, b1), false, "Same properties but different constructor"); // failed
 
-     function Car(year) {
 
-         var privateVar = 0;
 
-         this.year = year;
 
-         this.isOld = function() {
 
-             return year > 10;
 
-         };
 
-     }
 
-     function Human(year) {
 
-         var privateVar = 1;
 
-         this.year = year;
 
-         this.isOld = function() {
 
-             return year > 80;
 
-         };
 
-     }
 
-     var car = new Car(30);
 
-     var carSame = new Car(30);
 
-     var carDiff = new Car(10);
 
-     var human = new Human(30);
 
-     var diff = {
 
-         year: 30
 
-     };
 
-     var same = {
 
-         year: 30,
 
-         isOld: function () {}
 
-     };
 
-     equals(QUnit.equiv(car, car), true);
 
-     equals(QUnit.equiv(car, carDiff), false);
 
-     equals(QUnit.equiv(car, carSame), true);
 
-     equals(QUnit.equiv(car, human), false);
 
- });
 
- test("Complex Instances Nesting (with function value in literals and/or in nested instances)", function() {
 
-     function A(fn) {
 
-         this.a = {};
 
-         this.fn = fn;
 
-         this.b = {a: []};
 
-         this.o = {};
 
-         this.fn1 = fn;
 
-     }
 
-     function B(fn) {
 
-         this.fn = fn;
 
-         this.fn1 = function () {};
 
-         this.a = new A(function () {});
 
-     }
 
-     function fnOutside() {
 
-     }
 
-     function C(fn) {
 
-         function fnInside() {
 
-         }
 
-         this.x = 10;
 
-         this.fn = fn;
 
-         this.fn1 = function () {};
 
-         this.fn2 = fnInside;
 
-         this.fn3 = {
 
-             a: true,
 
-             b: fnOutside // ok make reference to a function in all instances scope
 
-         };
 
-         this.o1 = {};
 
-         // This function will be ignored.
 
-         // Even if it is not visible for all instances (e.g. locked in a closures),
 
-         // it is from a  property that makes part of an instance (e.g. from the C constructor)
 
-         this.b1 = new B(function () {});
 
-         this.b2 = new B({
 
-             x: {
 
-                 b2: new B(function() {})
 
-             }
 
-         });
 
-     }
 
-     function D(fn) {
 
-         function fnInside() {
 
-         }
 
-         this.x = 10;
 
-         this.fn = fn;
 
-         this.fn1 = function () {};
 
-         this.fn2 = fnInside;
 
-         this.fn3 = {
 
-             a: true,
 
-             b: fnOutside, // ok make reference to a function in all instances scope
 
-             // This function won't be ingored.
 
-             // It isn't visible for all C insances
 
-             // and it is not in a property of an instance. (in an Object instances e.g. the object literal)
 
-             c: fnInside
 
-         };
 
-         this.o1 = {};
 
-         // This function will be ignored.
 
-         // Even if it is not visible for all instances (e.g. locked in a closures),
 
-         // it is from a  property that makes part of an instance (e.g. from the C constructor)
 
-         this.b1 = new B(function () {});
 
-         this.b2 = new B({
 
-             x: {
 
-                 b2: new B(function() {})
 
-             }
 
-         });
 
-     }
 
-     function E(fn) {
 
-         function fnInside() {
 
-         }
 
-         this.x = 10;
 
-         this.fn = fn;
 
-         this.fn1 = function () {};
 
-         this.fn2 = fnInside;
 
-         this.fn3 = {
 
-             a: true,
 
-             b: fnOutside // ok make reference to a function in all instances scope
 
-         };
 
-         this.o1 = {};
 
-         // This function will be ignored.
 
-         // Even if it is not visible for all instances (e.g. locked in a closures),
 
-         // it is from a  property that makes part of an instance (e.g. from the C constructor)
 
-         this.b1 = new B(function () {});
 
-         this.b2 = new B({
 
-             x: {
 
-                 b1: new B({a: function() {}}),
 
-                 b2: new B(function() {})
 
-             }
 
-         });
 
-     }
 
-     var a1 = new A(function () {});
 
-     var a2 = new A(function () {});
 
-     equals(QUnit.equiv(a1, a2), true);
 
-     equals(QUnit.equiv(a1, a2), true); // different instances
 
-     var b1 = new B(function () {});
 
-     var b2 = new B(function () {});
 
-     equals(QUnit.equiv(b1, b2), true);
 
-     var c1 = new C(function () {});
 
-     var c2 = new C(function () {});
 
-     equals(QUnit.equiv(c1, c2), true);
 
-     var d1 = new D(function () {});
 
-     var d2 = new D(function () {});
 
-     equals(QUnit.equiv(d1, d2), false);
 
-     var e1 = new E(function () {});
 
-     var e2 = new E(function () {});
 
-     equals(QUnit.equiv(e1, e2), false);
 
- });
 
- test('object with references to self wont loop', function(){
 
-     var circularA = {
 
-         abc:null
 
-     }, circularB = {
 
-         abc:null
 
-     };
 
-     circularA.abc = circularA;
 
-     circularB.abc = circularB;
 
-     equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on object (ambigous test)");
 
-     circularA.def = 1;
 
-     circularB.def = 1;
 
-     equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on object (ambigous test)");
 
-     circularA.def = 1;
 
-     circularB.def = 0;
 
-     equals(QUnit.equiv(circularA, circularB), false, "Should not repeat test on object (unambigous test)");
 
- });
 
- test('array with references to self wont loop', function(){
 
-     var circularA = [],
 
-         circularB = [];
 
-     circularA.push(circularA);
 
-     circularB.push(circularB);
 
-     equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on array (ambigous test)");
 
-     circularA.push( 'abc' );
 
-     circularB.push( 'abc' );
 
-     equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on array (ambigous test)");
 
-     circularA.push( 'hello' );
 
-     circularB.push( 'goodbye' );
 
-     equals(QUnit.equiv(circularA, circularB), false, "Should not repeat test on array (unambigous test)");
 
- });
 
- test('mixed object/array with references to self wont loop', function(){
 
-     var circularA = [{abc:null}],
 
-         circularB = [{abc:null}];
 
-     circularA[0].abc = circularA;
 
-     circularB[0].abc = circularB;
 
-     circularA.push(circularA);
 
-     circularB.push(circularB);
 
-     equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on object/array (ambigous test)");
 
-     circularA[0].def = 1;
 
-     circularB[0].def = 1;
 
-     equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on object/array (ambigous test)");
 
-     circularA[0].def = 1;
 
-     circularB[0].def = 0;
 
-     equals(QUnit.equiv(circularA, circularB), false, "Should not repeat test on object/array (unambigous test)");
 
- });
 
- test("Test that must be done at the end because they extend some primitive's prototype", function() {
 
-     // Try that a function looks like our regular expression.
 
-     // This tests if we check that a and b are really both instance of RegExp
 
-     Function.prototype.global = true;
 
-     Function.prototype.multiline = true;
 
-     Function.prototype.ignoreCase = false;
 
-     Function.prototype.source = "my regex";
 
-     var re = /my regex/gm;
 
-     equals(QUnit.equiv(re, function () {}), false, "A function that looks that a regex isn't a regex");
 
-     // This test will ensures it works in both ways, and ALSO especially that we can make differences
 
-     // between RegExp and Function constructor because typeof on a RegExpt instance is "function"
 
-     equals(QUnit.equiv(function () {}, re), false, "Same conversely, but ensures that function and regexp are distinct because their constructor are different");
 
- });
 
 
  |