changeset 2716:2b5c27299cde

[project @ 1997-02-22 08:40:55 by jwe]
author jwe
date Sat, 22 Feb 1997 08:44:22 +0000
parents df8c732b4fb2
children 981cd8a2e41b
files scripts/ChangeLog scripts/general/postpad.m scripts/general/prepad.m scripts/polynomial/compan.m scripts/polynomial/conv.m scripts/polynomial/deconv.m scripts/polynomial/polyderiv.m scripts/polynomial/polyinteg.m scripts/polynomial/polyreduce.m scripts/polynomial/polyval.m scripts/polynomial/polyvalm.m src/ChangeLog src/lex.l test/octave.test/poly/compan-1.m test/octave.test/poly/compan-2.m test/octave.test/poly/compan-3.m test/octave.test/poly/compan-4.m test/octave.test/poly/compan-5.m test/octave.test/poly/compan-6.m test/octave.test/poly/conv-1.m test/octave.test/poly/conv-2.m test/octave.test/poly/conv-3.m test/octave.test/poly/conv-4.m test/octave.test/poly/conv-5.m test/octave.test/poly/conv-6.m test/octave.test/poly/deconv-1.m test/octave.test/poly/deconv-2.m test/octave.test/poly/deconv-3.m test/octave.test/poly/deconv-4.m test/octave.test/poly/deconv-5.m test/octave.test/poly/poly-1.m test/octave.test/poly/poly-2.m test/octave.test/poly/poly-3.m test/octave.test/poly/poly-4.m test/octave.test/poly/poly.exp test/octave.test/poly/polyderiv-1.m test/octave.test/poly/polyderiv-2.m test/octave.test/poly/polyderiv-3.m test/octave.test/poly/polyderiv-4.m test/octave.test/poly/polyfit-1.m test/octave.test/poly/polyfit-2.m test/octave.test/poly/polyfit-3.m test/octave.test/poly/polyfit-4.m test/octave.test/poly/polyfit-5.m test/octave.test/poly/polyinteg-1.m test/octave.test/poly/polyinteg-2.m test/octave.test/poly/polyinteg-3.m test/octave.test/poly/polyinteg-4.m test/octave.test/poly/polyreduce-1.m test/octave.test/poly/polyreduce-2.m test/octave.test/poly/polyreduce-3.m test/octave.test/poly/polyreduce-4.m test/octave.test/poly/polyreduce-5.m test/octave.test/poly/polyval-1.m test/octave.test/poly/polyval-2.m test/octave.test/poly/polyval-3.m test/octave.test/poly/polyval-4.m test/octave.test/poly/polyval-5.m test/octave.test/poly/polyval-6.m test/octave.test/poly/polyvalm-1.m test/octave.test/poly/polyvalm-2.m test/octave.test/poly/residue-1.m test/octave.test/poly/roots-1.m test/octave.test/poly/roots-2.m test/octave.test/poly/roots-3.m
diffstat 65 files changed, 340 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/ChangeLog
+++ b/scripts/ChangeLog
@@ -1,3 +1,18 @@
+Sat Feb 22 01:06:22 1997  John W. Eaton  <jwe@bevo.che.wisc.edu>
+
+	* polynomial/conv.m: Check inputs with is_vector(), not is_matrix().
+	* polynomial/deconv.m: Likewise.
+	* polynomial/polyderiv.m: Likewise.
+	* polynomial/polyinteg.m: Likewise.
+	* polynomial/polyreduce.m: Likewise.
+	* polynomial/polyval.m: Likewise.
+	* polynomial/polyvalm.m: Likewise.
+	* general/postpad.m: Likewise.
+	* general/prepad.m: Likewise.
+
+	* polynomial/compan.m: Check input with is_vector(), not
+	is_matrix().  Handle scalar case.
+
 Fri Feb 21 13:36:58 1997  John W. Eaton  <jwe@bevo.che.wisc.edu>
 
 	* plot/contour.m: Order data so that it is consistent with
--- a/scripts/general/postpad.m
+++ b/scripts/general/postpad.m
@@ -38,7 +38,7 @@
     usage ("postpad (x, l) or postpad (x, l, c)");
   endif
 
-  if (is_matrix (x))
+  if (! is_vector (x))
     error ("first argument must be a vector");
   elseif (! is_scalar (l))
     error ("second argument must be a scaler");
--- a/scripts/general/prepad.m
+++ b/scripts/general/prepad.m
@@ -38,7 +38,7 @@
     usage ("prepad (x, l) or prepad (x, l, c)");
   endif
 
-  if (is_matrix (x))
+  if (! is_vector (x))
     error ("first argument must be a vector");
   elseif (! is_scalar (l))
     error ("second argument must be a scaler");
--- a/scripts/polynomial/compan.m
+++ b/scripts/polynomial/compan.m
@@ -52,18 +52,23 @@
     usage ("compan (vector)");
   endif
 
-  if(is_matrix (c))
+  if (! is_vector (c))
     error("compan: expecting a vector argument.");
   endif
 
   ## Ensure that c is a row vector.
 
-  if(rows(c) > 1)
+  if (rows (c) > 1)
     c = c.';
   endif
 
   n = length (c);
-  A = diag (ones (n-2, 1), -1);
-  A (1, :) = -c (2:n) /c (1);
+
+  if (n == 1)
+    A = [];
+  else
+    A = diag (ones (n-2, 1), -1);
+    A(1,:) = -c(2:n) / c(1);
+  endif
 
 endfunction
--- a/scripts/polynomial/conv.m
+++ b/scripts/polynomial/conv.m
@@ -39,7 +39,7 @@
     usage ("conv(a, b)");
   endif
 
-  if (is_matrix (a) || is_matrix (b))
+  if (! (is_vector (a) && is_vector (b)))
     error("conv: both arguments must be vectors");
   endif
 
--- a/scripts/polynomial/deconv.m
+++ b/scripts/polynomial/deconv.m
@@ -41,7 +41,7 @@
     usage ("deconv (y, a)");
   endif
 
-  if (is_matrix (y) || is_matrix (a))
+  if (! (is_vector (y) && is_vector (a)))
     error("conv: both arguments must be vectors");
   endif
 
--- a/scripts/polynomial/polyderiv.m
+++ b/scripts/polynomial/polyderiv.m
@@ -35,7 +35,7 @@
     usage ("polyderiv (vector)");
   endif
 
-  if (is_matrix (p))
+  if (! is_vector (p))
     error ("argument must be a vector");
   endif
 
--- a/scripts/polynomial/polyinteg.m
+++ b/scripts/polynomial/polyinteg.m
@@ -37,7 +37,7 @@
     usage ("polyinteg (vector)");
   endif
 
-  if (is_matrix (p))
+  if (! (is_vector (p) || isempty (p)))
     error ("argument must be a vector");
   endif
 
--- a/scripts/polynomial/polyreduce.m
+++ b/scripts/polynomial/polyreduce.m
@@ -31,20 +31,32 @@
 
 function p = polyreduce (p)
 
-  index = find (p == 0);
+  if (nargin != 1)
+    usage ("polyreduce (p)");
+  endif
 
-  if (length (index) != 0)
+  if (! (is_vector (p) || isempty (p)))
+    error ("polyreduce: argument must be a vector");
+  endif
 
-    index = find (index == 1:length (index));
+  if (! isempty (p))
+
+    index = find (p == 0);
 
     if (length (index) != 0)
 
-      if (length (p) > 1)
-	p = p (index (length (index))+1:length (p));
-      endif
+      index = find (index == 1:length (index));
+
+      if (length (index) != 0)
 
-      if (length (p) == 0)
-	p = 0;
+      	if (length (p) > 1)
+	  p = p (index (length (index))+1:length (p));
+      	endif
+
+      	if (length (p) == 0)
+	  p = 0;
+      	endif
+
       endif
 
     endif
--- a/scripts/polynomial/polyval.m
+++ b/scripts/polynomial/polyval.m
@@ -45,10 +45,15 @@
     usage ("polyval (c, x)");
   endif
 
-  if(is_matrix (c))
+  if (! (is_vector (c) || isempty (c)))
     error ("poly: first argument must be a vector.");
   endif
 
+  if (isempty (x))
+    y = [];
+    return;
+  endif
+
   if (length (c) == 0)
     y = c;
     return;
--- a/scripts/polynomial/polyvalm.m
+++ b/scripts/polynomial/polyvalm.m
@@ -46,7 +46,7 @@
     usage ("polyvalm (c, x)");
   endif
 
-  if (is_matrix (c))
+  if (! (is_vector (c) || isempty (c)))
     error("poly: first argument must be a vector.");
   endif
 
@@ -54,7 +54,12 @@
     error("poly: second argument must be a square matrix.");
   endif
 
-  [v, d] = eig(x);
+  if (isempty (c))
+    y = [];
+    return;
+  endif
+
+  [v, d] = eig (x);
 
   y = v * diag (polyval (c, diag (d))) * v';
 
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,8 @@
 Fri Feb 21 15:35:18 1997  John W. Eaton  <jwe@bevo.che.wisc.edu>
 
+	* lex.l: Require flex 2.5 or later (we really want 2.5.4 or later,
+	but there seems to be no good way to check the patchlevel).
+
 	* oct-stream.cc (octave_base_stream::oscanf): Instead of returning
 	an error, just quit processing after a conversion fails.
 
--- a/src/lex.l
+++ b/src/lex.l
@@ -63,6 +63,12 @@
 #include <y.tab.h>
 #include <oct-gperf.h>
 
+#if ! (defined (FLEX_SCANNER) \
+       && defined (YY_FLEX_MAJOR_VERSION) && YY_FLEX_MAJOR_VERSION >= 2 \
+       && defined (YY_FLEX_MINOR_VERSION) && YY_FLEX_MINOR_VERSION >= 5)
+#error lex.l requires flex version 2.5.4 or later
+#endif
+
 // Flags that need to be shared between the lexer and parser.
 lexical_feedback lexer_flags;
 
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/compan-1.m
@@ -0,0 +1,1 @@
+all (all (compan ([1, 2, 3]) == [-2, -3; 1, 0]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/compan-2.m
@@ -0,0 +1,1 @@
+all (all (compan ([1; 2; 3]) == [-2, -3; 1, 0]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/compan-3.m
@@ -0,0 +1,1 @@
+isempty (compan (4))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/compan-4.m
@@ -0,0 +1,1 @@
+all (all (compan ([3, 2, 1]) == [-2/3, -1/3; 1, 0]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/compan-5.m
@@ -0,0 +1,1 @@
+compan ([1,2;3,4])
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/compan-6.m
@@ -0,0 +1,1 @@
+compan ([])
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/conv-1.m
@@ -0,0 +1,1 @@
+all (all (conv (ones (3, 1), ones (3, 1)) == [1, 2, 3, 2, 1]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/conv-2.m
@@ -0,0 +1,1 @@
+all (all (conv (ones (1, 3), ones (3, 1)) == [1, 2, 3, 2, 1]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/conv-3.m
@@ -0,0 +1,1 @@
+all (all (conv (3, [1, 2, 3]) == [3, 6, 9]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/conv-4.m
@@ -0,0 +1,1 @@
+conv ([1, 2; 3, 4], 3)
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/conv-5.m
@@ -0,0 +1,1 @@
+conv (2, 3)
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/conv-6.m
@@ -0,0 +1,1 @@
+conv (2, [])
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/deconv-1.m
@@ -0,0 +1,2 @@
+[b, r] = deconv ([3, 6, 9, 9], [1, 2, 3]);
+all (all (b == [3, 0])) && r == 9
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/deconv-2.m
@@ -0,0 +1,2 @@
+[b, r] = deconv ([3, 6], [1, 2, 3]);
+b == 0 && all (all (r == [3, 6]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/deconv-3.m
@@ -0,0 +1,2 @@
+[b, r] = deconv ([3, 6], [1; 2; 3]);
+b == 0 && all (all (r == [3, 6]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/deconv-4.m
@@ -0,0 +1,1 @@
+[b, r] = deconv ([3, 6], [1, 2; 3, 4]);
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/deconv-5.m
@@ -0,0 +1,2 @@
+[b, r] = deconv ([3; 6], [1, 2, 3]);
+b == 0 && all (all (r == [3, 6]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/poly-1.m
@@ -0,0 +1,1 @@
+all (all (poly ([1, 2, 3]) == [1, -6, 11, -6]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/poly-2.m
@@ -0,0 +1,1 @@
+all (all (poly ([1, 2; 3, 4]) - [1, -5, -2] < 2 * eps))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/poly-3.m
@@ -0,0 +1,1 @@
+poly ([1, 2, 3; 4, 5, 6])
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/poly-4.m
@@ -0,0 +1,1 @@
+poly ([])
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/poly.exp
@@ -0,0 +1,203 @@
+set test compan-1
+set prog_output "ans = 1"
+do_test compan-1.m
+
+set test compan-2
+set prog_output "ans = 1"
+do_test compan-2.m
+
+set test compan-3
+set prog_output "ans = 1"
+do_test compan-3.m
+
+set test compan-4
+set prog_output "ans = 1"
+do_test compan-4.m
+
+set test compan-5
+set prog_output "error:.*"
+do_test compan-5.m
+
+set test compan-6
+set prog_output "error:.*"
+do_test compan-6.m
+
+set test conv-1
+set prog_output "ans = 1"
+do_test conv-1.m
+
+set test conv-2
+set prog_output "ans = 1"
+do_test conv-2.m
+
+set test conv-3
+set prog_output "ans = 1"
+do_test conv-3.m
+
+set test conv-4
+set prog_output "error:.*"
+do_test conv-4.m
+
+set test conv-5
+set prog_output "ans = 6"
+do_test conv-5.m
+
+set test conv-6
+set prog_output "error:.*"
+do_test conv-6.m
+
+set test deconv-1
+set prog_output "ans = 1"
+do_test deconv-1.m
+
+set test deconv-2
+set prog_output "ans = 1"
+do_test deconv-2.m
+
+set test deconv-3
+set prog_output "ans = 1"
+do_test deconv-3.m
+
+set test deconv-4
+set prog_output "error:.*"
+do_test deconv-4.m
+
+set test deconv-5
+set prog_output "error:.*"
+do_test deconv-5.m
+
+set test poly-1
+set prog_output "ans = 1"
+do_test poly-1.m
+
+set test poly-2
+set prog_output "ans = 1"
+do_test poly-2.m
+
+set test poly-3
+set prog_output "error:.*"
+do_test poly-3.m
+
+set test poly-4
+set prog_output "ans = 1"
+do_test poly-4.m
+
+set test polyderiv-1
+set prog_output "ans = 1"
+do_test polyderiv-1.m
+
+set test polyderiv-2
+set prog_output "ans = 1"
+do_test polyderiv-2.m
+
+set test polyderiv-3
+set prog_output "error:.*"
+do_test polyderiv-3.m
+
+set test polyderiv-4
+set prog_output "error:.*"
+do_test polyderiv-4.m
+
+set test polyfit-1
+set prog_output "ans = 1"
+do_test polyfit-1.m
+
+set test polyfit-2
+set prog_output "ans = 1"
+do_test polyfit-2.m
+
+set test polyfit-3
+set prog_output "error:.*"
+do_test polyfit-3.m
+
+set test polyfit-4
+set prog_output "error:.*"
+do_test polyfit-4.m
+
+set test polyfit-5
+set prog_output "error:.*"
+do_test polyfit-5.m
+
+set test polyinteg-1
+set prog_output "ans = 1"
+do_test polyinteg-1.m
+
+set test polyinteg-2
+set prog_output "ans = 1"
+do_test polyinteg-2.m
+
+set test polyinteg-3
+set prog_output "ans = 1"
+do_test polyinteg-3.m
+
+set test polyinteg-4
+set prog_output "error:.*"
+do_test polyinteg-4.m
+
+set test polyreduce-1
+set prog_output "ans = 1"
+do_test polyreduce-1.m
+
+set test polyreduce-2
+set prog_output "ans = 1"
+do_test polyreduce-2.m
+
+set test polyreduce-3
+set prog_output "ans = 1"
+do_test polyreduce-3.m
+
+set test polyreduce-4
+set prog_output "ans = 1"
+do_test polyreduce-4.m
+
+set test polyreduce-5
+set prog_output "error:.*"
+do_test polyreduce-5.m
+
+set test polyval-1
+set prog_output "ans = 1"
+do_test polyval-1.m
+
+set test polyval-2
+set prog_output "ans = 1"
+do_test polyval-2.m
+
+set test polyval-3
+set prog_output "ans = 1"
+do_test polyval-3.m
+
+set test polyval-4
+set prog_output "ans = 1"
+do_test polyval-4.m
+
+set test polyval-5
+set prog_output "error:.*"
+do_test polyval-5.m
+
+set test polyval-6
+set prog_output "ans = 1"
+do_test polyval-6.m
+
+set test polyvalm-1
+set prog_output "ans = 1"
+do_test polyvalm-1.m
+
+set test polyvalm-2
+set prog_output "error:.*"
+do_test polyvalm-2.m
+
+set test residue-1
+set prog_output "ans = 1"
+do_test residue-1.m
+
+set test roots-1
+set prog_output "ans = 1"
+do_test roots-1.m
+
+set test roots-2
+set prog_output "ans = 1"
+do_test roots-2.m
+
+set test roots-3
+set prog_output "error:.*"
+do_test roots-3.m
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyderiv-1.m
@@ -0,0 +1,1 @@
+all (all (polyderiv ([1, 2, 3]) == [2, 2]))
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyderiv-2.m
@@ -0,0 +1,1 @@
+polyderiv (13) == 0
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyderiv-3.m
@@ -0,0 +1,1 @@
+polyderiv ([])
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyderiv-4.m
@@ -0,0 +1,1 @@
+polyderiv ([1, 2; 3, 4])
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyfit-1.m
@@ -0,0 +1,2 @@
+x = [-2, -1, 0, 1, 2];
+all (all (polyfit (x, x.^2+x+1, 2) - [1; 1; 1] < 4*eps))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyfit-2.m
@@ -0,0 +1,2 @@
+x = [-2, -1, 0, 1, 2];
+all (all (polyfit (x, x.^2+x+1, 3) - [0; 1; 1; 1] < 8*eps))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyfit-3.m
@@ -0,0 +1,1 @@
+polyfit ([1, 2; 3, 4], [1, 2; 3, 4], 4)
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyfit-4.m
@@ -0,0 +1,2 @@
+x = [-2, -1, 0, 1, 2];
+polyfit (x, x.^2+x+1)
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyfit-5.m
@@ -0,0 +1,2 @@
+x = [-2, -1, 0, 1, 2];
+polyfit (x, x.^2+x+1, [])
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyinteg-1.m
@@ -0,0 +1,1 @@
+all (all (polyinteg ([2, 2]) == [1, 2, 0]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyinteg-2.m
@@ -0,0 +1,1 @@
+isempty (polyinteg ([]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyinteg-3.m
@@ -0,0 +1,1 @@
+all (all (polyinteg (3) == [3, 0]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyinteg-4.m
@@ -0,0 +1,1 @@
+polyinteg ([1, 2; 3, 4])
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyreduce-1.m
@@ -0,0 +1,1 @@
+all (all (polyreduce ([0, 0, 1, 2, 3]) == [1, 2, 3]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyreduce-2.m
@@ -0,0 +1,1 @@
+all (all (polyreduce ([1, 2, 3, 0, 0]) == [1, 2, 3, 0, 0]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyreduce-3.m
@@ -0,0 +1,1 @@
+all (all (polyreduce ([1, 0, 3]) == [1, 0, 3]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyreduce-4.m
@@ -0,0 +1,1 @@
+isempty (polyreduce ([]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyreduce-5.m
@@ -0,0 +1,1 @@
+polyreduce ([1, 2; 3, 4])
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyval-1.m
@@ -0,0 +1,1 @@
+polyval ([1, 1, 1], 2) == 7
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyval-2.m
@@ -0,0 +1,1 @@
+all (all (polyval ([1, 1, 1], [0; 1; 2]) == [1; 3; 7]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyval-3.m
@@ -0,0 +1,1 @@
+isempty (polyval ([1, 1, 1], []))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyval-4.m
@@ -0,0 +1,1 @@
+all (all (polyval ([1, 1, 1], [-1, 0; 1, 2]) == [1, 1; 3, 7]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyval-5.m
@@ -0,0 +1,1 @@
+polyval ([1, 2; 3, 4], [-1, 0; 1, 2])
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyval-6.m
@@ -0,0 +1,1 @@
+isempty (polyval ([], [-1, 0; 1, 2]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyvalm-1.m
@@ -0,0 +1,1 @@
+isempty (polyvalm ([], [1, 2; 3, 4]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/polyvalm-2.m
@@ -0,0 +1,1 @@
+polyvalm ([1, 1, 1], [1, 2; 3, 4; 5, 6])
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/residue-1.m
@@ -0,0 +1,7 @@
+b = [1, 1, 1];
+a = [1, -5, 8, -4];
+[r, p, k, e] = residue (b, a);
+(abs (r - [-2; 7; 3]) < sqrt (eps)
+ && abs (p - [2; 2; 1]) < sqrt (eps)
+ && isempty (k)
+ && e == [1; 2; 1])
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/roots-1.m
@@ -0,0 +1,1 @@
+all (all (abs (roots ([1, -6, 11, -6]) - [3; 2; 1]) < sqrt (eps)))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/roots-2.m
@@ -0,0 +1,1 @@
+isempty (roots ([]))
new file mode 100644
--- /dev/null
+++ b/test/octave.test/poly/roots-3.m
@@ -0,0 +1,1 @@
+roots ([1, 2; 3, 4])