dynamic_block_scoping.sf 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/usr/bin/ruby
  2. assert_eq(
  3. gather {
  4. var i = 4
  5. while (--i) { |a|
  6. take(a)
  7. }
  8. },
  9. [3,2,1]
  10. )
  11. assert_eq(
  12. gather {
  13. var i = 4
  14. while (--i) { |a|
  15. take(\a)
  16. }
  17. }.map {|x| *x },
  18. [3,2,1]
  19. )
  20. assert_eq(
  21. gather {
  22. for i in (1..5) {
  23. var x = i**2
  24. take(\x)
  25. }
  26. }.map {|x| *x },
  27. [1, 4, 9, 16, 25]
  28. )
  29. assert_eq(
  30. gather {
  31. var i = 1
  32. while (i <= 5) {
  33. var x = i**2
  34. take(\x)
  35. ++i
  36. }
  37. }.map {|x| *x },
  38. [1, 4, 9, 16, 25]
  39. )
  40. assert_eq(
  41. gather {
  42. var i = 1
  43. loop {
  44. break if (i > 5)
  45. var x = i**2
  46. take(\x)
  47. ++i
  48. }
  49. }.map {|x| *x },
  50. [1, 4, 9, 16, 25]
  51. )
  52. assert_eq(
  53. gather {
  54. for (var i = 1; i <= 5; ++i) {
  55. var x = i**2
  56. take(\x)
  57. }
  58. }.map {|x| *x },
  59. [1, 4, 9, 16, 25]
  60. )
  61. assert_eq(
  62. gather {
  63. for n in [1,2,3,4] {
  64. take(\n)
  65. }
  66. }.map {|x| *x },
  67. [1,2,3,4]
  68. )
  69. assert_eq(
  70. gather {
  71. for a,b in [[1,2],[3,4]] {
  72. take(\a, \b)
  73. }
  74. }.map {|x| *x },
  75. [1,2,3,4]
  76. )
  77. assert_eq(
  78. gather {
  79. var n = 0
  80. @:HERE if (true) {
  81. var x = n;
  82. take(\x)
  83. goto :HERE if (++n < 3)
  84. }
  85. }.map{ *_ },
  86. [0, 1, 2]
  87. )
  88. say "** Test passed!"