summary refs log tree commit diff stats
path: root/tests/constr/tconexpr.nim
blob: cca6dd84f630fd233c714ddec501eae5050777cf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
discard """
  nimout: '''
Fibonacci sequence: 0, 1, 1, 2, 3
Sequence continues: 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610
'''
"""


import strformat

var fib_n {.compileTime.}: int
var fib_prev {.compileTime.}: int
var fib_prev_prev {.compileTime.}: int

proc next_fib(): int {.compileTime.} =
  let fib = if fib_n < 2:
    fib_n
  else:
    fib_prev_prev + fib_prev
  inc(fib_n)
  fib_prev_prev = fib_prev
  fib_prev = fib
  fib

const f0 = next_fib()
const f1 = next_fib()
const f2 = next_fib()
const f3 = next_fib()
const f4 = next_fib()

static:
  echo fmt"Fibonacci sequence: {f0}, {f1}, {f2}, {f3}, {f4}"

const fib_continues = block:
  var result = fmt"Sequence continues: "
  for i in 0..10:
    if i > 0:
      add(result, ", ")
    add(result, $next_fib())
  result

static:
  echo fib_continues