# # Test various variable substitution scenarios # symbolic n; # unimodular transformation # is := { [i,j] : 0 <=i<= 4 && 0 <= j<= 6 }; t := { [i,j] -> [i2,j2] : i2 = i+j && j2 = i+2*j }; codegen t:is; # non-unimodular transformation # is := { [i,j] : 0 <=i<= 4 && 0 <= j<= 6 }; t := { [i,j] -> [i2,j2] : i2 = 2*i+j && j2 = i+2*j }; codegen t:is; # second loop level is degenerated # is := {[i,j]:1 <= j <= 100 && j = i+4}; t := {[i,j]->[a,b]: a = i && b = j}; codegen t:is; # global variable case 1 # is := { [i] : 19+n = i }; t:= { [i] -> [j]: j = i }; codegen t:is; # global variable case 2 # is := {[i]: i-16 <= n < i && exists (alpha: i = n+1+3*alpha) }; t := {[i] -> [i] : exists ( alpha : i = 1+n+18alpha)}; codegen t:is;