range.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. var assert = require('assert');
  2. var Lazy = require('..');
  3. var expresso = expresso;
  4. function range(i, j, s) {
  5. var r = [];
  6. var s = s || 1;
  7. if (j > i) for (;i<j;i+=s) r.push(i);
  8. else for(;i>j;i-=s) r.push(i);
  9. return r;
  10. }
  11. exports['infinite range'] = function () {
  12. var joinExecuted = false;
  13. Lazy.range('10..').take(10).join(function (xs) {
  14. joinExecuted = true;
  15. assert.deepEqual(xs, range(10, 20));
  16. assert.equal(xs.length, 10);
  17. });
  18. setTimeout(function () {
  19. assert.ok(joinExecuted, 'join didn\'t execute');
  20. }, 2000);
  21. }
  22. exports['infinite range half-open'] = function () {
  23. var joinExecuted = false;
  24. Lazy.range('(10..').take(10).join(function (xs) {
  25. joinExecuted = true;
  26. assert.deepEqual(xs, range(11, 21));
  27. assert.equal(xs.length, 10);
  28. });
  29. setTimeout(function () {
  30. assert.ok(joinExecuted, 'join didn\'t execute');
  31. }, 2000);
  32. }
  33. exports['range i'] = function () {
  34. var joinExecuted = false;
  35. Lazy.range(10).join(function (xs) {
  36. joinExecuted = true;
  37. assert.deepEqual(xs, range(0, 10));
  38. assert.equal(xs.length, 10);
  39. });
  40. setTimeout(function () {
  41. assert.ok(joinExecuted, 'join didn\'t execute');
  42. }, 2000);
  43. }
  44. exports['range i,j (i<j)'] = function () {
  45. var joinExecuted = false;
  46. Lazy.range(-10, 10).join(function (xs) {
  47. joinExecuted = true;
  48. assert.deepEqual(xs, range(-10, 10));
  49. assert.equal(xs.length, 20);
  50. });
  51. setTimeout(function () {
  52. assert.ok(joinExecuted, 'join didn\'t execute');
  53. }, 2000);
  54. }
  55. exports['range i,j,s (i<j)'] = function () {
  56. var joinExecuted = false;
  57. Lazy.range(-10, 10, 2).join(function (xs) {
  58. joinExecuted = true;
  59. assert.deepEqual(xs, range(-10, 10, 2));
  60. assert.equal(xs.length, 10);
  61. });
  62. setTimeout(function () {
  63. assert.ok(joinExecuted, 'join didn\'t execute');
  64. }, 2000);
  65. }
  66. exports['range i,j,s (i>j)'] = function () {
  67. var joinExecuted = false;
  68. Lazy.range(10, 0, 2).join(function (xs) {
  69. joinExecuted = true;
  70. assert.deepEqual(xs, range(10, 0, 2));
  71. assert.equal(xs.length, 5);
  72. });
  73. setTimeout(function () {
  74. assert.ok(joinExecuted, 'join didn\'t execute');
  75. }, 2000);
  76. }
  77. exports['range i,j (i>j)'] = function () {
  78. var joinExecuted = false;
  79. Lazy.range(10, -8).join(function (xs) {
  80. joinExecuted = true;
  81. assert.deepEqual(xs, range(10, -8));
  82. assert.equal(xs.length, 18);
  83. });
  84. setTimeout(function () {
  85. assert.ok(joinExecuted, 'join didn\'t execute');
  86. }, 2000);
  87. }
  88. exports['range i..j (i<j)'] = function () {
  89. var joinExecuted = false;
  90. Lazy.range('5..50').join(function (xs) {
  91. joinExecuted = true;
  92. assert.deepEqual(xs, range(5, 50));
  93. assert.equal(xs.length, 45);
  94. });
  95. setTimeout(function () {
  96. assert.ok(joinExecuted, 'join didn\'t execute');
  97. }, 2000);
  98. }
  99. exports['range i..j (i>j)'] = function () {
  100. var joinExecuted = false;
  101. Lazy.range('50..44').join(function (xs) {
  102. joinExecuted = true;
  103. assert.deepEqual(xs, range(50, 44));
  104. assert.equal(xs.length, 6);
  105. });
  106. setTimeout(function () {
  107. assert.ok(joinExecuted, 'join didn\'t execute');
  108. }, 2000);
  109. }
  110. exports['range i,next..j (i<j)'] = function () {
  111. var joinExecuted = false;
  112. Lazy.range('1,1.1..4').join(function (xs) {
  113. joinExecuted = true;
  114. assert.deepEqual(xs, range(1,4,0.1));
  115. assert.equal(xs.length, 30);
  116. });
  117. setTimeout(function () {
  118. assert.ok(joinExecuted, 'join didn\'t execute');
  119. }, 2000);
  120. }
  121. exports['range i,next..j (i>j)'] = function () {
  122. var joinExecuted = false;
  123. Lazy.range('4,3.9..1').join(function (xs) {
  124. joinExecuted = true;
  125. assert.deepEqual(xs, range(4,1,0.1));
  126. assert.equal(xs.length, 30);
  127. });
  128. setTimeout(function () {
  129. assert.ok(joinExecuted, 'join didn\'t execute');
  130. }, 2000);
  131. }
  132. exports['range [i..j] (i<j)'] = function () {
  133. var joinExecuted = false;
  134. Lazy.range('[1..10]').join(function (xs) {
  135. joinExecuted = true;
  136. assert.deepEqual(xs, range(1,11));
  137. assert.equal(xs.length, 10);
  138. });
  139. setTimeout(function () {
  140. assert.ok(joinExecuted, 'join didn\'t execute');
  141. }, 2000);
  142. }
  143. exports['range [i..j] (i>j)'] = function () {
  144. var joinExecuted = false;
  145. Lazy.range('[10..1]').join(function (xs) {
  146. joinExecuted = true;
  147. assert.deepEqual(xs, range(10,0));
  148. assert.equal(xs.length, 10);
  149. });
  150. setTimeout(function () {
  151. assert.ok(joinExecuted, 'join didn\'t execute');
  152. }, 2000);
  153. }
  154. exports['range [i..j) (i<j)'] = function () {
  155. var joinExecuted = false;
  156. Lazy.range('[1..10)').join(function (xs) {
  157. joinExecuted = true;
  158. assert.deepEqual(xs, range(1,10));
  159. assert.equal(xs.length, 9);
  160. });
  161. setTimeout(function () {
  162. assert.ok(joinExecuted, 'join didn\'t execute');
  163. }, 2000);
  164. }
  165. exports['range [i..j) (i>j)'] = function () {
  166. var joinExecuted = false;
  167. Lazy.range('[10..1)').join(function (xs) {
  168. joinExecuted = true;
  169. assert.deepEqual(xs, range(10,1));
  170. assert.equal(xs.length, 9);
  171. });
  172. setTimeout(function () {
  173. assert.ok(joinExecuted, 'join didn\'t execute');
  174. }, 2000);
  175. }
  176. exports['range (i..j] (i<j)'] = function () {
  177. var joinExecuted = false;
  178. Lazy.range('(1..10]').join(function (xs) {
  179. joinExecuted = true;
  180. assert.deepEqual(xs, range(2,11));
  181. assert.equal(xs.length, 9);
  182. });
  183. setTimeout(function () {
  184. assert.ok(joinExecuted, 'join didn\'t execute');
  185. }, 2000);
  186. }
  187. exports['range (i..j] (i>j)'] = function () {
  188. var joinExecuted = false;
  189. Lazy.range('(10..1]').join(function (xs) {
  190. joinExecuted = true;
  191. assert.deepEqual(xs, range(9,0));
  192. assert.equal(xs.length, 9);
  193. });
  194. setTimeout(function () {
  195. assert.ok(joinExecuted, 'join didn\'t execute');
  196. }, 2000);
  197. }
  198. exports['range (i..j) (i<j)'] = function () {
  199. var joinExecuted = false;
  200. Lazy.range('(1..10)').join(function (xs) {
  201. joinExecuted = true;
  202. assert.deepEqual(xs, range(2,10));
  203. assert.equal(xs.length, 8);
  204. });
  205. setTimeout(function () {
  206. assert.ok(joinExecuted, 'join didn\'t execute');
  207. }, 2000);
  208. }
  209. exports['range (i..j) (i>j)'] = function () {
  210. var joinExecuted = false;
  211. Lazy.range('(10..1)').join(function (xs) {
  212. joinExecuted = true;
  213. assert.deepEqual(xs, range(9,1));
  214. assert.equal(xs.length, 8);
  215. });
  216. setTimeout(function () {
  217. assert.ok(joinExecuted, 'join didn\'t execute');
  218. }, 2000);
  219. }
  220. exports['range [i,step..j]'] = function () {
  221. var joinExecuted = false;
  222. Lazy.range('[5,10..50]').join(function (xs) {
  223. joinExecuted = true;
  224. assert.deepEqual(xs, range(5,51,5));
  225. assert.equal(xs.length, 10);
  226. });
  227. setTimeout(function () {
  228. assert.ok(joinExecuted, 'join didn\'t execute');
  229. }, 2000);
  230. }