From b320f6cd36a748cd4a83ba44fb125c0e20c84806 Mon Sep 17 00:00:00 2001 From: schodet Date: Sun, 7 Nov 2004 22:12:28 +0000 Subject: Correction des tests, ajout d'un test en C pour mul_f824, ajout de cos et sin. --- n/asserv/src/dsp_check.pl | 97 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 88 insertions(+), 9 deletions(-) (limited to 'n/asserv/src/dsp_check.pl') 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; } + -- cgit v1.2.3