summaryrefslogtreecommitdiff
path: root/n/asserv/src/dsp_check.pl
diff options
context:
space:
mode:
authorschodet2004-10-13 00:12:18 +0000
committerschodet2004-10-13 00:12:18 +0000
commit7868feb67d7c2d1414cbcd84b6f02a7305a65117 (patch)
tree35826ef1077ff133862b295f93242f89e4b7dc68 /n/asserv/src/dsp_check.pl
parentfdd6216054017f4aded7501d4a6e725710438a35 (diff)
Version toute nouvelle qu'elle est bien et bien organisée.
Gestion du mode pwm simple. Gestion de la virgule fixe dans les coefs. Préparation pour les améliorations futures. Séparation dans des fichiers différents. Netoyage.
Diffstat (limited to 'n/asserv/src/dsp_check.pl')
-rw-r--r--n/asserv/src/dsp_check.pl53
1 files changed, 53 insertions, 0 deletions
diff --git a/n/asserv/src/dsp_check.pl b/n/asserv/src/dsp_check.pl
new file mode 100644
index 0000000..69384e2
--- /dev/null
+++ b/n/asserv/src/dsp_check.pl
@@ -0,0 +1,53 @@
+#!/usr/bin/perl -w
+use strict;
+use POSIX qw(floor);
+
+my $fail = 0;
+
+sub check_mul
+{
+ my ($a, $b, $r) = @_;
+ $b = $b / 256;
+ my $m = floor ($a * $b);
+ if ($m > (1 << 15) - 1 || $m < -(1 << 15))
+ {
+ print "overflow $a * $b = $r ($m)\n";
+ }
+ elsif ($m == $r)
+ {
+ print "pass $a * $b = $r\n";
+ }
+ else
+ {
+ print "fail $a * $b = $r ($m)\n";
+ $fail = 1;
+ }
+}
+
+while (<>)
+{
+ chomp;
+ if (/^m (-?\d+) (\d+)$/)
+ {
+ my ($a, $b) = ($1, $2);
+ $_ = <>; chomp;
+ next unless (/^r (-?\d+)$/);
+ my $r = $1;
+ $_ = <>; chomp;
+ next unless (/^R (-?\d+)$/);
+ my $R = $1;
+ check_mul $a, $b, $r;
+ check_mul -$a, $b, $R;
+ }
+}
+
+if ($fail)
+{
+ print "test failled\n";
+ exit 1;
+}
+else
+{
+ print "test passed\n";
+ exit 0;
+}