changeset 17321:1e1d42f0f332

parser.tst: Re-indent and add tests for bug #33304. * test/parser.tst: Use just a single space after '%!' before code. Add tests for left-to-right exponentiation operation.
author Rik <rik@octave.org>
date Wed, 21 Aug 2013 20:23:03 -0700
parents 088d014a7fe2
children 7f27a3cbdb41
files test/parser.tst
diffstat 1 files changed, 173 insertions(+), 161 deletions(-) [+]
line wrap: on
line diff
--- a/test/parser.tst
+++ b/test/parser.tst
@@ -35,217 +35,229 @@
 ## Level 13 (parentheses and indexing)
 ## Overrides all other levels
 %!test
-%!  a.b = 1;
-%!  assert (a. b++, 1)
-%!  assert (a.b, 2)
-%!  clear a;
-%!  a.b = [0 1];
-%!  b = 2;
-%!  assert (a.b', [0;1])
-%!  assert (!a .b, logical ([1 0]))
-%!  assert (3*a .b, [0 3])
-%!  assert (a. b-1, [-1 0])
-%!  assert (a. b:3, 0:3)
-%!  assert (a. b>0.5, logical ([0 1]))
-%!  assert (a. b&0, logical ([0 0]))
-%!  assert (a. b|0, logical ([0 1]))
-%!  a.b = [1 2];
-%!  assert (a. b&&0, false)
-%!  assert (a. b||0, true)
-%!  a.b += a. b*2;
-%!  assert (a.b, [3 6])
+%! a.b = 1;
+%! assert (a. b++, 1);
+%! assert (a.b, 2);
+%! clear a;
+%! a.b = [0 1];
+%! b = 2;
+%! assert (a.b', [0;1]);
+%! assert (!a .b, logical ([1 0]));
+%! assert (3*a .b, [0 3]);
+%! assert (a. b-1, [-1 0]);
+%! assert (a. b:3, 0:3);
+%! assert (a. b>0.5, logical ([0 1]));
+%! assert (a. b&0, logical ([0 0]));
+%! assert (a. b|0, logical ([0 1]));
+%! a.b = [1 2];
+%! assert (a. b&&0, false);
+%! assert (a. b||0, true);
+%! a.b += a. b*2;
+%! assert (a.b, [3 6]);
 ## Level 12 (postfix increment and decrement)
 %!test
-%!  a = [3 5];
-%!  assert (2.^a ++, [8 32])
-%!  assert (a, [4 6])
-%!  assert (a--', [4; 6])
-%!  assert (a, [3 5])
-%!  a = 0;
-%!  assert (!a --, true)
-%!  assert (-a ++, 1)
-%!  assert (3*a ++, 0)
-%!  assert (a++-2, -1)
-%!  assert (1:a ++, 1:2)
-%!  assert (4>a++, true)
-%!  a = [0 -1];
-%!  assert ([1 1] & a++, logical ([0 1]))
-%!  assert ([0 0] | a++, logical ([1 0]))
-%!  a = 0;
-%!  assert (1 && a ++, false)
-%!  assert (0 || a --, true)
-%!  a = 5; b = 2;
-%!  b +=a ++;
-%!  assert (b, 7)
+%! a = [3 5];
+%! assert (2.^a ++, [8 32]);
+%! assert (a, [4 6]);
+%! assert (a--', [4; 6]);
+%! assert (a, [3 5]);
+%! a = 0;
+%! assert (!a --, true);
+%! assert (-a ++, 1);
+%! assert (3*a ++, 0);
+%! assert (a++-2, -1);
+%! assert (1:a ++, 1:2);
+%! assert (4>a++, true);
+%! a = [0 -1];
+%! assert ([1 1] & a++, logical ([0 1]));
+%! assert ([0 0] | a++, logical ([1 0]));
+%! a = 0;
+%! assert (1 && a ++, false);
+%! assert (0 || a --, true);
+%! a = 5; b = 2;
+%! b +=a ++;
+%! assert (b, 7);
 
 ## Level 11 (transpose and exponentiation)
 %!test
-%!  assert (-2 ^2, -4)
-%!  assert (!0 ^0, false)
-%!  assert (2*3 ^2, 18)
-%!  assert (2+3 ^2, 11)
-%!  assert ([1:10](1:2 ^2), [1 2 3 4])
-%!  assert (3>2 ^2, false)
-%!  assert (1&0 ^0, true)
-%!  assert (0|0 ^0, true)
-%!  assert (1&&0 ^0, true)
-%!  assert (0||0 ^0, true)
-%!  a = 3;
-%!  a *= 0 ^0;
-%!  assert (a, 3)
+%! assert (-2 ^2, -4);
+%! assert (!0 ^0, false);
+%! assert (2*3 ^2, 18);
+%! assert (2+3 ^2, 11);
+%! assert ([1:10](1:2 ^2), [1 2 3 4]);
+%! assert (3>2 ^2, false);
+%! assert (1&0 ^0, true);
+%! assert (0|0 ^0, true);
+%! assert (1&&0 ^0, true);
+%! assert (0||0 ^0, true);
+%! a = 3;
+%! a *= 0 ^0;
+%! assert (a, 3);
 ## Level 10 (unary plus/minus, prefix increment/decrement, not)
 %!test
-%!  a = 2;
-%!  assert (++ a*3, 9)
-%!  assert (-- a-2, 0)
-%!  assert (a, 2)
-%!  assert (! a-2, -2)
-%!  assert ([1:10](++ a:5), 3:5)
-%!  a = [1 0];
-%!  assert (! a>=[1 0], [false true])
-%!  a = 0;
-%!  assert (++ a&1, true)
-%!  assert (-- a|0, false)
-%!  assert (-- a&&1, true)
-%!  assert (++ a||0, false)
-%!  a = 3;
-%!  a *= ++a;
-%!  assert (a, 16)
+%! a = 2;
+%! assert (++ a*3, 9);
+%! assert (-- a-2, 0);
+%! assert (a, 2);
+%! assert (! a-2, -2);
+%! assert ([1:10](++ a:5), 3:5);
+%! a = [1 0];
+%! assert (! a>=[1 0], [false true]);
+%! a = 0;
+%! assert (++ a&1, true);
+%! assert (-- a|0, false);
+%! assert (-- a&&1, true);
+%! assert (++ a||0, false);
+%! a = 3;
+%! a *= ++a;
+%! assert (a, 16);
 ## Level 9 (multiply, divide)
 %!test
-%!  assert (3+4 * 5, 23)
-%!  assert (5 * 1:6, [5 6])
-%!  assert (3>1 * 5, false)
-%!  assert (1&1 * 0, false)
-%!  assert (1|1 * 0, true)
-%!  assert (1&&1 * 0, false)
-%!  assert (1||1 * 0, true)
-%!  a = 3;
-%!  a /= a * 2;
-%!  assert (a, 0.5)
+%! assert (3+4 * 5, 23);
+%! assert (5 * 1:6, [5 6]);
+%! assert (3>1 * 5, false);
+%! assert (1&1 * 0, false);
+%! assert (1|1 * 0, true);
+%! assert (1&&1 * 0, false);
+%! assert (1||1 * 0, true);
+%! a = 3;
+%! a /= a * 2;
+%! assert (a, 0.5);
 ## Level 8 (add, subtract)
 %!test
-%!  assert ([2 + 1:6], 3:6)
-%!  assert (3>1 + 5, false)
-%!  assert (1&1 - 1, false)
-%!  assert (0|1 - 2, true)
-%!  assert (1&&1 - 1, false)
-%!  assert (0||1 - 2, true)
-%!  a = 3;
-%!  a *= 1 + 1;
-%!  assert (a, 6)
+%! assert ([2 + 1:6], 3:6);
+%! assert (3>1 + 5, false);
+%! assert (1&1 - 1, false);
+%! assert (0|1 - 2, true);
+%! assert (1&&1 - 1, false);
+%! assert (0||1 - 2, true);
+%! a = 3;
+%! a *= 1 + 1;
+%! assert (a, 6);
 ## Level 7 (colon)
 %!test
-%!  assert (5:-1: 3>4, [true false false])
-%!  assert (1: 3&1, [true true true])
-%!  assert (1: 3|0, [true true true])
-%!  assert (-1: 3&&1, false)
-%!  assert (-1: 3||0, false)
-%!  a = [1:3];
-%!  a += 3 : 5;
-%!  assert (a, [4 6 8])
+%! assert (5:-1: 3>4, [true false false]);
+%! assert (1: 3&1, [true true true]);
+%! assert (1: 3|0, [true true true]);
+%! assert (-1: 3&&1, false);
+%! assert (-1: 3||0, false);
+%! a = [1:3];
+%! a += 3 : 5;
+%! assert (a, [4 6 8]);
 ## Level 6 (relational)
 %!test
-%!  assert (0 == -1&0, false)
-%!  assert (1 == -1|0, false)
-%!  assert (0 == -1&&0, false)
-%!  assert (1 == -1||0, false)
-%!  a = 2;
-%!  a *= 3 > 1;
-%!  assert (a, 2)
+%! assert (0 == -1&0, false);
+%! assert (1 == -1|0, false);
+%! assert (0 == -1&&0, false);
+%! assert (1 == -1||0, false);
+%! a = 2;
+%! a *= 3 > 1;
+%! assert (a, 2);
 ## Level 5 (element-wise and)
 %!test
-%!  assert (0 & 1|1, true)
-%!  assert ([0 1] & 1&&1, false)
-%!  assert (0 & 1||1, true)
-%!  a = 2;
-%!  a *= 3 & 1;
-%!  assert (a, 2)
+%! assert (0 & 1|1, true);
+%! assert ([0 1] & 1&&1, false);
+%! assert (0 & 1||1, true);
+%! a = 2;
+%! a *= 3 & 1;
+%! assert (a, 2);
 ## Level 4 (element-wise or)
 %!test
-%!  assert ([0 1] | 1&&0, false)
-%!  assert ([0 1] | 1||0, true)
-%!  a = 2;
-%!  a *= 0 | 1;
-%!  assert (a, 2)
+%! assert ([0 1] | 1&&0, false);
+%! assert ([0 1] | 1||0, true);
+%! a = 2;
+%! a *= 0 | 1;
+%! assert (a, 2);
 ## Level 3 (logical and)
 %!test
-%!  assert (0 && 1||1, true)
-%!  a = 2;
-%!  a *= 3 && 1;
-%!  assert (a, 2)
+%! assert (0 && 1||1, true);
+%! a = 2;
+%! a *= 3 && 1;
+%! assert (a, 2);
 ## Level 2 (logical or)
 %!test
-%!  a = 2;
-%!  a *= 0 || 1;
-%!  assert (a, 2)
+%! a = 2;
+%! a *= 0 || 1;
+%! assert (a, 2);
 
 ## Tests for operator precedence within each level where ordering should
 ## be left to right except for postfix and assignment operators.
 
 ## Level 13 (parentheses and indexing)
 %!test
-%!  a.b1 = 2;
-%!  assert (a.(strcat('b','1'))++, 2)
-%!  assert (a.b1, 3)
-%!  b = {1 2 3 4 5};
-%!  assert (b{(a. b1 + 1)}, 4)
-%!  b = 1:5;
-%!  assert (b(a. b1 + 1), 4)
-%!  assert ([2 3].^2', [4; 9])
+%! a.b1 = 2;
+%! assert (a.(strcat('b','1'))++, 2);
+%! assert (a.b1, 3);
+%! b = {1 2 3 4 5};
+%! assert (b{(a. b1 + 1)}, 4);
+%! b = 1:5;
+%! assert (b(a. b1 + 1), 4);
+%! assert ([2 3].^2', [4; 9]);
 ## Level 12 (postfix increment and decrement)
 ## No tests possible since a++-- is not valid
 ## Level 11 (transpose and exponentiation)
-## Note: Exponentiation works left to right for compatibility with Matlab.
-%!  assert (2^3**2, 64)
-%!  assert ([2 3].^2.', [4;9])
-%!  assert ([2 3].'.^2, [4;9])
-%!  assert (3*4i'.', 0 - 12i)
-%!  assert (3*4i.'.', 0 + 12i)
+## Note: Exponentiation should be left-to-right, but Octave does right-to-left.
+##       See bug #33304.
+%!test
+%! assert (2^3**2, 64);
+%! assert ([2 3].^2.', [4;9]);
+%! assert ([2 3].'.^2, [4;9]);
+%! assert (3*4i'.', 0 - 12i);
+%! assert (3*4i.'.', 0 + 12i);
+%! assert (2^-4^3, (1/16)^3);
+%! assert (2^+4^3, 16^3);
+%! assert (2^~0^2, 4);
+
+## Note: Exponentiation should be left-to-right, but Octave does right-to-left.
+##       See bug #33304.
+
 ## Level 10 (unary plus/minus, prefix increment/decrement, not)
 %!test
-%!  assert (+-+1, -1)
-%!  a = -1;
-%!  assert (!++a, true)
-%!  assert (a, 0)
-%!  assert (-~a, -1)
-%!  assert (!~--a, true)
-%!  assert (a, -1)
+%! assert (+-+1, -1);
+%! a = -1;
+%! assert (!++a, true);
+%! assert (a, 0);
+%! assert (-~a, -1);
+%! assert (!~--a, true);
+%! assert (a, -1);
 ## Level 9 (multiply, divide)
 %!test
-%!  assert (3 * 4 / 5, 2.4)
-%!  assert (3 ./ 4 .* 5, 3.75)
-%!  assert (2 * 4 \ 6, 0.75)
-%!  assert (2 .\ 4 .* 6, 12)
+%! assert (3 * 4 / 5, 2.4);
+%! assert (3 ./ 4 .* 5, 3.75);
+%! assert (2 * 4 \ 6, 0.75);
+%! assert (2 .\ 4 .* 6, 12);
 ## Level 8 (add, subtract)
 %!test
-%!  assert (-3 - 4 + 1 + 3 * 2, 0)
+%! assert (-3 - 4 + 1 + 3 * 2, 0);
 ## Level 7 (colon)
-## No tests possible because colon operator can't be combined with second colon operator
+## No tests possible because colon operator can't be combined
+## with second colon operator.
 ## Level 6 (relational)
 %!test
-%!  assert (0 < 1 <= 0.5 == 0 >= 0.5 > 0, true)
-%!  assert (1 < 1 == 0 != 0, true)
-%!  assert (1 < 1 == 0 ~= 0, true)
+%! assert (0 < 1 <= 0.5 == 0 >= 0.5 > 0, true);
+%! assert (1 < 1 == 0 != 0, true);
+%! assert (1 < 1 == 0 ~= 0, true);
 ## Level 5 (element-wise and)
-## No tests possible.  Only one operator (&) at this precedence level and operation is associative.
+## No tests possible.  Only one operator (&) at this precedence level
+## and operation is associative.
 ## Level 4 (element-wise or)
-## No tests possible.  Only one operator (|) at this precedence level and operation is associative.
+## No tests possible.  Only one operator (|) at this precedence level
+## and operation is associative.
 ## Level 3 (logical and)
 %!test
-%!  a = 1;
-%!  assert (1 && 0 && ++a, false)
-%!  assert (a, 1)
+%! a = 1;
+%! assert (1 && 0 && ++a, false);
+%! assert (a, 1);
 ## Level 2 (logical or)
 %!test
-%!  a = 1;
-%!  assert (0 || 1 || ++a, true)
-%!  assert (a, 1)
+%! a = 1;
+%! assert (0 || 1 || ++a, true);
+%! assert (a, 1);
 ## Level 1 (assignment)
 %!test
 %! a = 2; b = 5; c = 7;
-%! assert (a += b *= c += 1, 42)
-%! assert (b == 40 && c == 8)
+%! assert (a += b *= c += 1, 42);
+%! assert (b == 40 && c == 8);
 
 ## Test creation of anonymous functions