Checking if your kit is complete... Looks good Writing Makefile for Math::Quaternion cp lib/Math/Quaternion.pm blib/lib/Math/Quaternion.pm Manifying blib/man3/Math::Quaternion.3 PERL_DL_NONLAZY=1 /home/cpanrun/build/5.6.1/bin/perl -Iblib/arch -Iblib/lib -I/home/cpanrun/build/5.6.1/lib/5.6.1/i686-linux-thread-multi -I/home/cpanrun/build/5.6.1/lib/5.6.1 -e 'use Test::Harness qw(&runtests $verbose); $verbose=1; runtests @ARGV;' t/*.t t/001_basic.........1..77 ok 1 - use Math::Quaternion; "my" variable $rq2 masks earlier declaration in same scope at t/001_basic.t line 342. ok 2 - Math::Quaternion->new() makes a new quaternion... ok 3 - ...and it's a unit quaternion by default. ok 4 - Math::Quaternion->new(1,2,3,4) builds the correct quaternion. ok 5 - Math::Quaternion->new($q) copies quaternion $q ok 6 - Math::Quaternion->new([5,6,7,8]) builds the correct quaternion. ok 7 - Math::Quaternion->new($a) builds a scalar quaternion ok 8 - Math::Quaternion->new($a,$b,$c) builds a vector quaternion ok 9 - Math::Quaternion::dot($q1,$q2) gives a dot product ok 10 - Math::Quaternion->new(1,2) fails. ok 11 - Math::Quaternion->unit() builds a new unit quaternion ok 12 - Math::Quaternion::conjugate() conjugates ok 13 - Math::Quaternion::conjugate leaves argument unchanged. ok 14 - Math::Quaternion::negate() negates ok 15 - Math::Quaternion::plus() adds. ok 16 - Math::Quaternion::plus() commutes. ok 17 - Math::Quaternion::minus() subtracts. ok 18 - Math::Quaternion::squarednorm($q) returns squared norm of $q ok 19 - Math::Quaternion::scale() performs scalar multiplication ok 20 - Multiplying with a conjugate gives the squared norm ok 21 - Multiplying with inverse gives unit quaternion ok 22 - Quaternion multiplication is left-distributive ok 23 - Quaternion multiplication is right-distributive ok 24 - Quaternion multiplication is associative ok 25 - Math::Quaternion::multiply multiplies. ok 26 - Math::Quaternion::normalize() produces a unit quaternion ok 27 - The inverse of a unit quaternion is its conjugate ok 28 - Quaternions can be raised to integer exponents ok 29 - Quaternion powers raise magnitude to same power ok 30 - Quaternion raised to (-1)th power is inverse ok 31 - Exponentiation of real quaternion works ok 32 - Exponentiation of pure quaternion works ok 33 - Quaternion exponentiation exponentiates ok 34 - Logarithm of real quaternion works ok 35 - Exponentiation and Logarithm are mutually inverse ok 36 - Math::Quaternion::log([a,b,c,d]) works ok 37 - log( (-2,0,0,0) ) = (log(2),pi,0,0) ok 38 - Scalar exp(1) raised to quaternion power is the same as exponentiation ok 39 - a**b == exp(b*log(a)) for scalar a, quaternion b ok 40 - a**b == exp(b*log(a)) for quaternion a, scalar b ok 41 - a**b == exp(b*log(a)) for quaternion a,b ok 42 - Sanity check: I can make a random unit vector properly ok 43 - Math::Quaternion::rotation does not fail ok 44 - rotation_angle works ok 45 - Math::Quaternion->new(\%hash) does not fail ok 46 - Math::Quaternion->new(\%hash) produces correct rotation ok 47 - Math::Quaternion::rotation(rubbish) fails ok 48 - Math::Quaternion::rotation(much rubbish) fails ok 49 - Math::Quaternion::rotation($theta,\@vec) works ok 50 - Math::Quaternion::rotation(\@vec,$theta) works ok 51 - rotation_axis works ok 52 - (1,0,0,0)->rotation_axis() returns Z axis rather than crashing ok 53 - Math::Quaternion::rotate_vector() produces a 3-vector ok 54 - Rotation preserves length ok 55 - Rotation preserves component perpendicular to axes ok 56 - Rotated vector makes correct dot product with original ok 57 - matrix4x4() doesn't fail... ok 58 - ...and produces a 4x4 matrix... ok 59 - ...which produces the same rotation as the quaternion. ok 60 - matrix4x4andinverse() produces the same rotation matrix... ok 61 - ...as well as its inverse. ok 62 - matrix3x3() doesn't fail... ok 63 - ...and produces a 3x3 matrix... ok 64 - ...which produces the same rotation as the quaternion. ok 65 - Math::Quaternion::rotation(\@v1,\@v2) does not fail ok 66 - Math::Quaternion->new({v1=>..,v2=>..}) does not fail ok 67 - Math::Quaternion->new({v1=>..,v2=>..}) produces correct quaternion ok 68 - Math::Quaternion->new(rubbish) fails ok 69 - Rotation axis perpendicular to start and end orientations ok 70 - Rotation angle is angle between start and end vectors ok 71 - Rotation maps start vector onto end vector ok 72 - Stringification works ok 73 - Math::Quaternion::slerp() produces correct rotation axis ok 74 - Math::Quaternion::slerp() produces correct rotation angle ok 75 - Math::Quaternion::slerp works linearly for small angles ok 76 - Math::Quaternion::slerp() gives correct axis for -ve dp ok 77 - Math::Quaternion::slerp() gives correct angle for -ve dp ok t/002_overloading...1..25 ok 1 - Sanity check: can make random quaternions ok 2 - Quaternions evaluate to true ok 3 - ...even the zero quaternion. ok 4 - '+' is defined ok 5 - '+' commutes ok 6 - '~' conjugates ok 7 - '+' adds ok 8 - '-' is defined ok 9 - '-' subtracts ok 10 - Unary '-' negates ok 11 - '*' is defined ok 12 - '*'ing with a conjugate gives the squared norm ok 13 - '*'ing with inverse gives unit quaternion ok 14 - '*' is left-distributive ok 15 - '*' is right-distributive ok 16 - '*' multiplies. ok 17 - Scalar left-multiplication works ok 18 - Scalar right-multiplication works ok 19 - abs() gives the norm ok 20 - Stringification works ok 21 - Exponentiation works ok 22 - Logarithm works ok 23 - a**b works for quaternion a, scalar b ok 24 - a**b works for scalar a, quaternion b ok 25 - a**b works for quaternion a,b ok All tests successful. Files=2, Tests=102, 1 wallclock secs ( 0.84 cusr + 0.09 csys = 0.93 CPU) Installing /home/cpanrun/build/5.6.1/lib/site_perl/5.6.1/Math/Quaternion.pm Installing /home/cpanrun/build/5.6.1/man/man3/Math::Quaternion.3 Appending installation info to /home/cpanrun/build/5.6.1/lib/5.6.1/i686-linux-thread-multi/perllocal.pod