PageRenderTime 17ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/tests.coffee

http://github.com/MichaelBlume/coffeestream
CoffeeScript | 163 lines | 124 code | 36 blank | 3 comment | 7 complexity | c52da07d935946c273807168c192629a MD5 | raw file
Possible License(s): MIT
  1. #! /usr/bin/env coffee
  2. {Stream, primeStream} = require "./stream"
  3. assert = (b) ->
  4. if not b
  5. console.log 'FUCK'
  6. throw 'fuck'
  7. eq = (a,b) ->
  8. if a==b
  9. return
  10. console.log a
  11. console.log b
  12. throw 'fuck'
  13. eqList = (s,l) ->
  14. if s.equal Stream.make l...
  15. return
  16. console.log s.list()
  17. console.log l
  18. throw 'fuck'
  19. #before we start, make sure this equal thing works
  20. one_to_five = Stream.range(1,5)
  21. one_to_ten = Stream.range(1,10)
  22. six_to_ten = Stream.range(6,10)
  23. empty = new Stream()
  24. assert not one_to_five.equal one_to_ten
  25. assert not empty.equal one_to_five
  26. assert not one_to_five.equal empty
  27. assert not one_to_five.equal six_to_ten
  28. assert one_to_five.member(1)
  29. assert one_to_five.member(5)
  30. assert not one_to_five.member(6)
  31. s = Stream.make(10, 20, 30)
  32. eqList s, [10,20,30]
  33. eq s.length(), 3
  34. eq s.head(), 10
  35. eq s.item(0), 10
  36. eq s.item(1), 20
  37. eq s.item(2), 30
  38. eq s.sum(), 60
  39. t = s.tail()
  40. eq t.head(), 20
  41. u = t.tail()
  42. eq u.head(), 30
  43. v = u.tail()
  44. assert v.empty()
  45. s = Stream.range(10, 20)
  46. eqList s, [10..20]
  47. doubleNumber = (x) ->
  48. 2 * x
  49. numbers = Stream.range(10, 15)
  50. doubles = numbers.map(doubleNumber)
  51. eqList doubles, [20,22,24,26,28,30]
  52. checkIfOdd = (x) ->
  53. if x % 2 == 0
  54. false
  55. else
  56. true
  57. numbers = Stream.range(10, 15)
  58. onlyOdds = numbers.filter(checkIfOdd)
  59. eqList onlyOdds, [11,13,15]
  60. isFive = (x) -> x==5
  61. eqList Stream.range(1).until(isFive), [1..4]
  62. eqList Stream.range(1).up_until(isFive), [1..5]
  63. printItem = (x) ->
  64. console.log "The element is: " + x
  65. numbers = Stream.range(10, 12)
  66. #test this better
  67. numbers.walk printItem
  68. numbers = Stream.range(10, 100)
  69. fewerNumbers = numbers.take(10)
  70. eqList fewerNumbers, [10..19]
  71. numbers = Stream.range(1, 3)
  72. multiplesOfTen = numbers.scale(10)
  73. eqList multiplesOfTen, [10,20,30]
  74. eqList numbers.add(multiplesOfTen), [11,22,33]
  75. naturalNumbers = Stream.range()
  76. oneToTen = naturalNumbers.take(10)
  77. eqList oneToTen, [1..10]
  78. evenNumbers = naturalNumbers.map((x) ->
  79. 2 * x
  80. )
  81. oddNumbers = naturalNumbers.filter((x) ->
  82. x % 2 != 0
  83. )
  84. eqList evenNumbers.take(3), [2,4,6]
  85. eqList oddNumbers.take(3), [1,3,5]
  86. s = new Stream(10, ->
  87. new Stream()
  88. )
  89. eqList s, [10]
  90. t = new Stream(10, ->
  91. new Stream(20, ->
  92. new Stream(30, ->
  93. new Stream()
  94. )
  95. )
  96. )
  97. eqList t, [10,20,30]
  98. ones = ->
  99. new Stream(1, ones)
  100. s = ones()
  101. eqList s.take(3), [1,1,1]
  102. a = Stream.make 1,2,3
  103. b = Stream.make 4,5,6
  104. eqList a.append(b), [1,2,3,4,5,6]
  105. eqList a.cycle().take(8), [1,2,3,1,2,3,1,2]
  106. eqList Stream.repeat(1).take(5), [1,1,1,1,1]
  107. naturalNumbers = ->
  108. new Stream(1, ->
  109. ones().add naturalNumbers()
  110. )
  111. eqList naturalNumbers().take(5), [1..5]
  112. sieve = (s) ->
  113. h = s.head()
  114. new Stream(h, ->
  115. sieve s.tail().filter((x) ->
  116. x % h != 0
  117. )
  118. )
  119. tenPrimes = [2,3,5,7,11,13,17,19,23,29]
  120. eqList sieve(Stream.range(2)).take(10), tenPrimes
  121. eqList primeStream.take(10), tenPrimes
  122. fib = Stream.recursive ((a,b) -> a+b), 1, 1
  123. eqList fib.take(10), [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
  124. assert Stream.make(false, false, true).any()
  125. assert not Stream.make(false, false, false).any()
  126. assert Stream.make(true, true, true).all()
  127. assert not Stream.make(true, true, false).all()