scalar_context.sf 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #!/usr/bin/ruby
  2. # Test scalar context (provided by the unary + operator).
  3. var TimePiece = require('Time::Piece')
  4. var d = TimePiece.strptime("2020-02-02", "%Y-%m-%d")
  5. var a = [d.add(TimePiece.ONE_DAY)]
  6. var b = +d.add(TimePiece.ONE_DAY)
  7. assert_eq(a, [0, 0, 0, 3, 1, 120, 1, 33, 0])
  8. assert_eq(b.strftime("%Y-%m-%d"), "2020-02-03")
  9. var palindates = Enumerator({ |f|
  10. loop {
  11. f(d) if d.strftime("%Y%m%d").is_palindrome
  12. d = +d.add(TimePiece.ONE_DAY)
  13. }
  14. })
  15. assert_eq(palindates.first(2).map { .strftime("%Y-%m-%d") }, ["2020-02-02", "2021-12-02"])
  16. do {
  17. func foo(n) {
  18. (n, n+1, n+2)
  19. }
  20. var a = foo(42) # first element
  21. var b = +foo(42) # last element
  22. assert_eq(a, 42)
  23. assert_eq(b, 44)
  24. }
  25. do {
  26. require('Algorithm::Combinatorics')
  27. var data = %w(a b c)
  28. var iter = +%S<Algorithm::Combinatorics>.permutations(data)
  29. assert_eq(
  30. gather {
  31. while (var p = iter.next) {
  32. take(p)
  33. }
  34. },
  35. data.permutations)
  36. assert_eq([%S<Algorithm::Combinatorics>.permutations(data)], data.permutations) # list context
  37. }
  38. do {
  39. require('Algorithm::Loops')
  40. var arr1 = %w(a b c)
  41. var arr2 = %w(x y z)
  42. var iter = +%S<Algorithm::Loops>.NestedLoops([arr1, arr2])
  43. assert_eq(
  44. gather {
  45. while (var *car = iter.call) {
  46. take(car.clone)
  47. }
  48. },
  49. [arr1, arr2].cartesian
  50. )
  51. assert_eq([%S<Algorithm::Loops>.NestedLoops([arr1, arr2], {|*a| a })], [arr1, arr2].cartesian) # list context
  52. }
  53. say "** Test passed!"