123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- discard """
- sortoutput: true
- output: '''
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- Hello 1
- Hello 2
- Hello 3
- Hello 4
- Hello 5
- Hello 6
- '''
- """
- # bug #2287
- import threadPool
- # If `nums` is an array instead of seq,
- # NONE of the iteration ways below work (including high / len-1)
- let nums = @[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- proc log(n:int) =
- echo n
- proc main =
- parallel:
- for n in nums: # Error: cannot prove: i <= len(nums) + -1
- spawn log(n)
- #for i in 0 ..< nums.len: # Error: cannot prove: i <= len(nums) + -1
- #for i in 0 .. nums.len-1: # WORKS!
- #for i in 0 ..< nums.len: # WORKS!
- # spawn log(nums[i])
- # Array needs explicit size to work, probably related to issue #2287
- #const a: array[0..5, int] = [1,2,3,4,5,6]
- #const a = [1,2,3,4,5,6] # Doesn't work
- const a = @[1,2,3,4,5,6] # Doesn't work
- proc f(n: int) = echo "Hello ", n
- proc maino =
- parallel:
- # while loop doesn't work:
- var i = 0
- while i < a.high:
- #for i in countup(0, a.high-1, 2):
- spawn f(a[i])
- spawn f(a[i+1])
- i += 2
- maino() # Doesn't work outside a proc
- when true:
- main()
- block two:
- proc f(a: openArray[int]) =
- discard
- proc main() =
- var a: array[0..9, int] = [0,1,2,3,4,5,6,7,8,9]
- parallel:
- spawn f(a[0..2])
- main()
|