# Iteration 21: C-style for loop
# === Basic C-style for ===
=== simple C-style for
for ((i=0; i<10; i++)); do echo $i; done
---
(arith-for (init (word "i=0")) (test (word "i<10")) (step (word "i++")) (command (word "echo") (word "$i")))
---
=== C-style for with spaces
for (( i = 0 ; i < 10 ; i++ )); do echo $i; done
---
(arith-for (init (word "i = 0 ")) (test (word "i < 10 ")) (step (word "i++ ")) (command (word "echo") (word "$i")))
---
=== C-style for with brace group
for ((i=0; i<5; i++)); { echo $i; }
---
(arith-for (init (word "i=0")) (test (word "i<5")) (step (word "i++")) (command (word "echo") (word "$i")))
---
=== empty init
for ((; i<10; i++)); do echo $i; done
---
(arith-for (init (word "1")) (test (word "i<10")) (step (word "i++")) (command (word "echo") (word "$i")))
---
=== empty condition (infinite loop)
for ((i=0; ; i++)); do echo $i; break; done
---
(arith-for (init (word "i=0")) (test (word "1")) (step (word "i++")) (semi (command (word "echo") (word "$i")) (command (word "break"))))
---
=== empty increment
for ((i=0; i<10;)); do echo $i; ((i++)); done
---
(arith-for (init (word "i=0")) (test (word "i<10")) (step (word "1")) (semi (command (word "echo") (word "$i")) (arith (word "i++"))))
---
=== all empty (infinite loop)
for ((;;)); do break; done
---
(arith-for (init (word "1")) (test (word "1")) (step (word "1")) (command (word "break")))
---
=== multiple init variables
for ((i=0, j=10; i<j; i++, j--)); do echo $i $j; done
---
(arith-for (init (word "i=0, j=10")) (test (word "i<j")) (step (word "i++, j--")) (command (word "echo") (word "$i") (word "$j")))
---
=== compound condition
for ((i=0; i<10 && i%2==0; i++)); do echo $i; done
---
(arith-for (init (word "i=0")) (test (word "i<10 && i%2==0")) (step (word "i++")) (command (word "echo") (word "$i")))
---
=== decrement loop
for ((i=10; i>0; i--)); do echo $i; done
---
(arith-for (init (word "i=10")) (test (word "i>0")) (step (word "i--")) (command (word "echo") (word "$i")))
---
=== complex arithmetic
for ((i=1; i<=100; i*=2)); do echo $i; done
---
(arith-for (init (word "i=1")) (test (word "i<=100")) (step (word "i*=2")) (command (word "echo") (word "$i")))
---
=== C-style for in list
for ((i=0; i<3; i++)); do echo $i; done; echo done
---
(semi (arith-for (init (word "i=0")) (test (word "i<3")) (step (word "i++")) (command (word "echo") (word "$i"))) (command (word "echo") (word "done")))
---
=== C-style for with redirect
for ((i=0; i<3; i++)); do echo $i; done > output.txt
---
(arith-for (init (word "i=0")) (test (word "i<3")) (step (word "i++")) (command (word "echo") (word "$i"))) (redirect ">" "output.txt")
---
=== time C-style for
time for ((i=0; i<1000; i++)); do :; done
---
(time (arith-for (init (word "i=0")) (test (word "i<1000")) (step (word "i++")) (command (word ":"))))
---
=== negated C-style for
! for ((i=0; i<3; i++)); do false; done
---
(negation (arith-for (init (word "i=0")) (test (word "i<3")) (step (word "i++")) (command (word "false"))))
---
=== no semicolon before do
for ((i=0; i<3; i++)) do echo $i; done
---
(arith-for (init (word "i=0")) (test (word "i<3")) (step (word "i++")) (command (word "echo") (word "$i")))
---
=== nested parens in condition
for ((i=0; (i<5); i++)); do echo $i; done
---
(arith-for (init (word "i=0")) (test (word "(i<5)")) (step (word "i++")) (command (word "echo") (word "$i")))
---
=== deeply nested parens
for ((i=0; ((i+1)<10); i++)); do echo $i; done
---
(arith-for (init (word "i=0")) (test (word "((i+1)<10)")) (step (word "i++")) (command (word "echo") (word "$i")))
---
=== ternary in expression
for ((i=0; i<(a>b?a:b); i++)); do echo $i; done
---
(arith-for (init (word "i=0")) (test (word "i<(a>b?a:b)")) (step (word "i++")) (command (word "echo") (word "$i")))
---
=== bitwise operations
for ((i=1; i&0xFF; i<<=1)); do echo $i; done
---
(arith-for (init (word "i=1")) (test (word "i&0xFF")) (step (word "i<<=1")) (command (word "echo") (word "$i")))
---
=== with break
for ((i=0; ; i++)); do if ((i>5)); then break; fi; echo $i; done
---
(arith-for (init (word "i=0")) (test (word "1")) (step (word "i++")) (semi (if (arith (word "i>5")) (command (word "break"))) (command (word "echo") (word "$i"))))
---
=== with continue
for ((i=0; i<10; i++)); do if ((i%2)); then continue; fi; echo $i; done
---
(arith-for (init (word "i=0")) (test (word "i<10")) (step (word "i++")) (semi (if (arith (word "i%2")) (command (word "continue"))) (command (word "echo") (word "$i"))))
---
=== newlines in body with brace
for ((i=0; i<3; i++)) {
echo $i
}
---
(arith-for (init (word "i=0")) (test (word "i<3")) (step (word "i++")) (command (word "echo") (word "$i")))
---
=== pre and post increment
for ((i=0; i<5; ++i)); do echo $i; done
---
(arith-for (init (word "i=0")) (test (word "i<5")) (step (word "++i")) (command (word "echo") (word "$i")))
---
=== step by 2
for ((i=0; i<10; i+=2)); do echo $i; done
---
(arith-for (init (word "i=0")) (test (word "i<10")) (step (word "i+=2")) (command (word "echo") (word "$i")))
---
=== nested C-style for
for ((i=0; i<2; i++)); do for ((j=0; j<2; j++)); do echo $i $j; done; done
---
(arith-for (init (word "i=0")) (test (word "i<2")) (step (word "i++")) (arith-for (init (word "j=0")) (test (word "j<2")) (step (word "j++")) (command (word "echo") (word "$i") (word "$j"))))
---
=== C-style for in function
f() { for ((i=0; i<3; i++)); do echo $i; done; }
---
(function "f" (brace-group (arith-for (init (word "i=0")) (test (word "i<3")) (step (word "i++")) (command (word "echo") (word "$i")))))
---