summaryrefslogtreecommitdiff
path: root/n/asserv/src/dsp_check.pl
diff options
context:
space:
mode:
authorschodet2004-11-07 22:12:28 +0000
committerschodet2004-11-07 22:12:28 +0000
commitb320f6cd36a748cd4a83ba44fb125c0e20c84806 (patch)
tree5ad1368af4e31f5773212e8fbba1025939f13e99 /n/asserv/src/dsp_check.pl
parent5b4e5290c4c840f79722691c584cafc5c4223db0 (diff)
Correction des tests, ajout d'un test en C pour mul_f824, ajout de cos et sin.
Diffstat (limited to 'n/asserv/src/dsp_check.pl')
-rw-r--r--n/asserv/src/dsp_check.pl97
1 files changed, 88 insertions, 9 deletions
diff --git a/n/asserv/src/dsp_check.pl b/n/asserv/src/dsp_check.pl
index 738d32e..b6e8f76 100644
--- a/n/asserv/src/dsp_check.pl
+++ b/n/asserv/src/dsp_check.pl
@@ -3,6 +3,10 @@ use strict;
use POSIX qw(floor);
my $fail = 0;
+my $incomplete = 0;
+my $bugged = 0;
+
+my $pi = 4 * atan2 1, 1;
sub check_mul
{
@@ -26,21 +30,60 @@ sub check_mul
sub check_mul_f824
{
+ use bignum;
my ($a, $b, $r) = @_;
+ my ($ha, $hb, $hr) = (sprintf ("%x", $a), sprintf ("%x", $b), sprintf ("%x", $r));
$a = $a / (1 << 24);
$b = $b / (1 << 24);
- my $m = floor ($a * $b * (1 << 24));
- if ($m > (1 << 31) - 1 || $m < -(1 << 31))
+ $r = $r / (1 << 24);
+ my $m = floor ($a * $b * (1 << 24)) / (1 << 24);
+ if ($m > (1 << 7) - 1 || $m < -(1 << 7))
{
- print "overflow $a * $b = $r ($m)\n";
+ print "overflow $a * $b = $r ($m) | $ha $hb $hr\n";
}
elsif ($m == $r)
{
- print "pass $a * $b = $r\n";
+ print "pass $a * $b = $r | $ha $hb $hr\n";
}
else
{
- print "fail $a * $b = $r ($m)\n";
+ print "fail $a * $b = $r ($m) | $ha $hb $hr\n";
+ $fail = 1;
+ }
+}
+
+sub check_cos
+{
+ my ($a, $r) = @_;
+ my ($ha, $hr) = (sprintf ("%x", $a), sprintf ("%x", $r));
+ $a = $a / (1 << 24) * 2 * $pi;
+ $r = $r / (1 << 24);
+ my $c = floor (cos ($a) * (1 << 24)) / (1 << 24);
+ if ($c == $r)
+ {
+ print "pass cos $a = $r | $ha $hr\n";
+ }
+ else
+ {
+ print "fail cos $a = $r ($c) | $ha $hr\n";
+ $fail = 1;
+ }
+}
+
+sub check_sin
+{
+ my ($a, $r) = @_;
+ my ($ha, $hr) = (sprintf ("%x", $a), sprintf ("%x", $r));
+ $a = $a / (1 << 24) * 2 * $pi;
+ $r = $r / (1 << 24);
+ my $s = floor (sin ($a) * (1 << 24)) / (1 << 24);
+ if ($s == $r)
+ {
+ print "pass sin $a = $r | $ha $hr\n";
+ }
+ else
+ {
+ print "fail sin $a = $r ($s) | $ha $hr\n";
$fail = 1;
}
}
@@ -50,6 +93,7 @@ while (<>)
chomp;
if (/^m (-?\d+) (\d+)$/)
{
+ $incomplete++;
my ($a, $b) = ($1, $2);
$_ = <>; chomp;
next unless (/^r (-?\d+)$/);
@@ -59,9 +103,12 @@ while (<>)
my $R = $1;
check_mul $a, $b, $r;
check_mul -$a, $b, $R;
+ $incomplete--;
}
if (/^A (-?\d+)$/)
{
+ $bugged = 1;
+ $incomplete++;
my $a = $1;
$_ = <>; chomp;
next unless (/^B (-?\d+)$/);
@@ -69,14 +116,45 @@ while (<>)
$_ = <>; chomp;
next unless (/^r (-?\d+)$/);
my $r = $1;
- $_ = <>; chomp;
- next unless (/^R (-?\d+)$/);
- my $R = $1;
check_mul_f824 $a, $b, $r;
- check_mul_f824 -$a, $b, $R;
+ $_ = <>; chomp;
+ next unless (/^r (-?\d+)$/);
+ $r = $1;
+ check_mul_f824 -$a, $b, $r;
+ $_ = <>; chomp;
+ next unless (/^r (-?\d+)$/);
+ $r = $1;
+ check_mul_f824 $a, -$b, $r;
+ $_ = <>; chomp;
+ next unless (/^r (-?\d+)$/);
+ $r = $1;
+ check_mul_f824 -$a, -$b, $r;
+ $incomplete--;
+ }
+ if (/^c (-?\d+)$/)
+ {
+ $bugged = 1;
+ $incomplete++;
+ my $c = $1;
+ $_ = <>; chomp;
+ next unless (/^r (-?\d+)$/);
+ my $r = $1;
+ check_cos $c, $r;
+ $_ = <>; chomp;
+ next unless (/^r (-?\d+)$/);
+ $r = $1;
+ check_sin $c, $r;
+ $incomplete--;
}
}
+print "WARNING: test bugged\n" if ($bugged);
+
+if ($incomplete)
+{
+ print "$incomplete incomplete tests\n";
+}
+
if ($fail)
{
print "test failled\n";
@@ -87,3 +165,4 @@ else
print "test passed\n";
exit 0;
}
+