Difference between revisions of "LSL Language Test 2"

From Second Life Wiki
Jump to navigation Jump to search
(a typo !!!)
Line 140: Line 140:
}
}
   
   
vector gVector;


float testReturnFloat()
float testReturnFloat()
{
{
     return 1;
     return 1.0;
}
}


testParamAccessorAssign(vector f)
testArgumentAccessor(vector v)
{
{
     f.x = testReturnFloat();
     v = <0,0,0>;
     f.y = testReturnFloat();
    v.x = testReturnFloat();
     f.z = testReturnFloat();
     v.y = testReturnFloat();
     v.z = testReturnFloat();
    ensureVectorEqual("testArgumentAccessor", v, <1,1,1>);
}
 
testLocalAccessor()
{
    vector v = <0,0,0>;
    v.x = testReturnFloat();
    v.y = testReturnFloat();
    v.z = testReturnFloat();
    ensureVectorEqual("testLocalAccessor", v, <1,1,1>);
}
 
testGlobalAccessor()
{
    gVector = <0,0,0>;
    gVector.x = testReturnFloat();
    gVector.y = testReturnFloat();
    gVector.z = testReturnFloat();
    ensureVectorEqual("testGlobalAccessor", v, <1,1,1>);
}
}


Line 157: Line 178:
     ensureFloatExactEqual("1.4e-45 == (float)\"1.4e-45\"", 1.4e-45, (float)"1.4e-45");
     ensureFloatExactEqual("1.4e-45 == (float)\"1.4e-45\"", 1.4e-45, (float)"1.4e-45");
      
      
     vector v1 = <1,2,3>;
     // Managed pointer save/restore tests.
     testParamAccessorAssign(v1);
    testArgumentAccessor(<0,0,0>);
     ensureVectorEqual("vector v1 = <1,2,3>; testParamAccessorAssign(v1); v1 == <1,2,3>", v1, <1,2,3>);
     testLocalAccessor();
   
     testGlobalAccessor();
   
   
}
}



Revision as of 09:31, 18 February 2008

<lsl> integer gTestsPassed = 0; integer gTestsFailed = 0;

testPassed(string description, string actual, string expected) {

   ++gTestsPassed;
   //llSay(0, description);

}

testFailed(string description, string actual, string expected) {

   ++gTestsFailed;
   llSay(0, "FAILED!: " + description + " (" + actual + " expected " + expected + ")");

}

ensureTrue(string description, integer actual) {

   if(actual)
   {
       testPassed(description, (string) actual, (string) TRUE);
   }
   else
   {
       testFailed(description, (string) actual, (string) TRUE);
   }

}

ensureFalse(string description, integer actual) {

   if(actual)
   {
       testFailed(description, (string) actual, (string) FALSE);
   }
   else
   {
       testPassed(description, (string) actual, (string) FALSE);
   }

}

ensureIntegerEqual(string description, integer actual, integer expected) {

   if(actual == expected)
   {
       testPassed(description, (string) actual, (string) expected);
   }
   else
   {
       testFailed(description, (string) actual, (string) expected);
   }

}

integer floatEqual(float actual, float expected) {

   float error = llFabs(expected - actual);
   float epsilon = 0.001;
   if(error > epsilon)
   {
       llSay(0,"Float equality delta " + (string)error);
       return FALSE;
   }
   return TRUE;

}

ensureFloatEqual(string description, float actual, float expected) {

   if(floatEqual(actual, expected))
   {
       testPassed(description, (string) actual, (string) expected);
   }
   else
   {
       testFailed(description, (string) actual, (string) expected);
   }

}

ensureFloatExactEqual(string description, float actual, float expected) {

   if(actual == expected)
   {
       testPassed(description, (string) actual, (string) expected);
   }
   else
   {
       testFailed(description, (string) actual, (string) expected);
   }

}

ensureStringEqual(string description, string actual, string expected) {

   if(actual == expected)
   {
       testPassed(description, (string) actual, (string) expected);
   }
   else
   {
       testFailed(description, (string) actual, (string) expected);
   }

}

ensureVectorEqual(string description, vector actual, vector expected) {

   if(floatEqual(actual.x, expected.x) &&
       floatEqual(actual.y, expected.y) &&
       floatEqual(actual.z, expected.z))
   {
       testPassed(description, (string) actual, (string) expected);
   }
   else
   {
       testFailed(description, (string) actual, (string) expected);
   }

}

ensureRotationEqual(string description, rotation actual, rotation expected) {

   if(floatEqual(actual.x, expected.x) &&
       floatEqual(actual.y, expected.y) &&
       floatEqual(actual.z, expected.z) &&
       floatEqual(actual.s, expected.s))
   {
       testPassed(description, (string) actual, (string) expected);
   }
   else
   {
       testFailed(description, (string) actual, (string) expected);
   }

}

ensureListEqual(string description, list actual, list expected) {

   if(actual == expected)
   {
       testPassed(description, (string) actual, (string) expected);
   }
   else
   {
       testFailed(description, (string) actual, (string) expected);
   }

}

vector gVector;

float testReturnFloat() {

   return 1.0;

}

testArgumentAccessor(vector v) {

   v = <0,0,0>;
   v.x = testReturnFloat();
   v.y = testReturnFloat();
   v.z = testReturnFloat();
   ensureVectorEqual("testArgumentAccessor", v, <1,1,1>);

}

testLocalAccessor() {

   vector v = <0,0,0>;
   v.x = testReturnFloat();
   v.y = testReturnFloat();
   v.z = testReturnFloat();
   ensureVectorEqual("testLocalAccessor", v, <1,1,1>);

}

testGlobalAccessor() {

   gVector = <0,0,0>;
   gVector.x = testReturnFloat();
   gVector.y = testReturnFloat();
   gVector.z = testReturnFloat();
   ensureVectorEqual("testGlobalAccessor", v, <1,1,1>);

}

tests() {

   ensureFloatExactEqual("1.4e-45 == (float)\"1.4e-45\"", 1.4e-45, (float)"1.4e-45");
   
   // Managed pointer save/restore tests.
   testArgumentAccessor(<0,0,0>);
   testLocalAccessor();
   testGlobalAccessor();

}

runTests() {

   llResetTime();
   tests();
   llSay(0, "Ran " + (string)(gTestsPassed + gTestsFailed) + " tests in " + (string) llGetTime() + " seconds with " + (string)gTestsFailed + " failures");

}

default {

   state_entry()
   {
       runTests();
   }

   touch_start(integer total_number)
   {
       runTests();
   }

} </lsl>