TestLocals.hx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package unit;
  2. class TestLocals extends Test {
  3. function testIncrDecr() {
  4. var i = 5;
  5. eq( i++, 5 );
  6. eq( i, 6 );
  7. eq( i--, 6 );
  8. eq( i, 5 );
  9. eq( ++i, 6 );
  10. eq( i, 6 );
  11. eq( --i, 5 );
  12. eq( i, 5 );
  13. }
  14. function testScope() {
  15. var x = 0;
  16. eq(x,0);
  17. // simple scope
  18. {
  19. var x = "hello";
  20. eq(x,"hello");
  21. {
  22. var x = "";
  23. eq(x,"");
  24. }
  25. eq(x,"hello");
  26. }
  27. eq(x,0);
  28. // if
  29. var flag = true;
  30. if( flag ) {
  31. var x = "hello";
  32. eq(x,"hello");
  33. }
  34. eq(x,0);
  35. // for
  36. for( x in ["hello"] )
  37. eq(x,"hello");
  38. eq(x,0);
  39. // switch
  40. switch( MyEnum.D(MyEnum.A) ) {
  41. case D(x):
  42. eq(x,MyEnum.A);
  43. default:
  44. assert();
  45. }
  46. eq(x,0);
  47. // try/catch
  48. try {
  49. throw "hello";
  50. } catch( x : Dynamic ) {
  51. eq(x,"hello");
  52. }
  53. eq(x,0);
  54. }
  55. function testCapture() {
  56. // read
  57. var funs = new Array();
  58. for( i in 0...5 )
  59. funs.push(function() return i);
  60. for( k in 0...5 )
  61. eq(funs[k](),k);
  62. // write
  63. funs = new Array();
  64. var sum = 0;
  65. for( i in 0...5 ) {
  66. var k = 0;
  67. funs.push(function() { k++; sum++; return k; });
  68. }
  69. for( i in 0...5 )
  70. eq(funs[i](),1);
  71. eq(sum,5);
  72. // multiple
  73. var accesses = new Array();
  74. var sum = 0;
  75. for( i in 0...5 ) {
  76. var j = i;
  77. accesses.push({
  78. inc : function() { sum += j; j++; return j; },
  79. dec : function() { j--; sum -= j; return j; },
  80. });
  81. }
  82. for( i in 0...5 ) {
  83. var a = accesses[i];
  84. eq( a.inc(), i + 1 );
  85. eq( sum, i );
  86. eq( a.dec(), i );
  87. eq( sum, 0 );
  88. }
  89. }
  90. function testSubCapture() {
  91. var funs = new Array();
  92. for( i in 0...5 )
  93. funs.push(function() {
  94. var tmp = new Array();
  95. for( j in 0...5 )
  96. tmp.push(function() return i + j);
  97. var sum = 0;
  98. for( j in 0...5 )
  99. sum += tmp[j]();
  100. return sum;
  101. });
  102. for( i in 0...5 )
  103. eq( funs[i](), i * 5 + 10 );
  104. }
  105. function testParallelCapture() {
  106. var funs = new Array();
  107. for( i in 0...5 ) {
  108. if( true ) {
  109. var j = i;
  110. funs.push(function(k) return j);
  111. }
  112. if( true )
  113. funs.push(function(j) return j);
  114. }
  115. for( k in 0...5 ) {
  116. eq( funs[k*2](0), k );
  117. eq( funs[k*2+1](k), k );
  118. }
  119. }
  120. function testPossibleBug() {
  121. var funs = new Array();
  122. for( i in 0...5 )
  123. funs.push(function(i) return i);
  124. for( k in 0...5 )
  125. eq( funs[k](55), 55 );
  126. }
  127. }