test178
auto test178 = 
q{--- test178
	struct Result { i32 sum; i32 maxflips; }
	// https://benchmarksgame-team.pages.debian.net/benchmarksgame/description/fannkuchredux.html
	Result fannkuch(i32 n) {
		i32 signx;
		i32 maxflips;
		i32 sum;
		i32 i;
		i32 j;
		i32 k;
		i32 q1;
		i32 flips;
		i32 qq;
		i32 t;
		i32 sx;
		i32 tt;
		i32[100] p;
		i32[100] q;
		i32[100] s;
		signx = 1;
		maxflips = 0;
		sum = 0;
		for (i=1; i<=n; ++i) {
			p[i-1] = i;
			q[i-1] = i;
			s[i-1] = i;
		}
		while (true) {
			q1 = p[1-1];
			if (q1 != 1) {
				for (i=2; i<=n; ++i) {
					q[i-1] = p[i-1];
				}
				flips = 1;
				while (true) {
					qq = q[q1-1];
					if (qq == 1) {
						sum += signx*flips;
						if (flips > maxflips) {
							maxflips = flips;
						}
						break;
					}
					q[q1-1] = q1;
					if (q1 >= 4) {
						i = 2;
						j = q1-1;
						while (true) {
							{
								i32 temp = q[i-1];
								q[i-1] = q[j-1];
								q[j-1] = temp;
							}
							++i;
							--j;
							if (i >= j) break;
						}
					}
					q1 = qq;
					++flips;
				}
			}
			if (signx == 1) {
				{
					i32 temp = p[2-1];
					p[2-1] = p[1-1];
					p[1-1] = temp;
				}
				signx = -1;
			}
			else {
				{
					i32 temp = p[2-1];
					p[2-1] = p[3-1];
					p[3-1] = temp;
				}
				signx = 1;
				for (i=3; i<=n; ++i) {
					sx = s[i-1];
					if (sx != 1) {
						s[i-1] = sx-1;
						break;
					}
					if (i == n) {
						return Result(sum, maxflips);
					}
					s[i-1] = i;
					tt = p[1-1];
					for (j=1; j<=i; ++j) {
						p[j-1] = p[j+1-1];
					}
					p[i+1-1] = tt;
				}
			}
		}
	}
};
  
		tests passing 
		functionsvariables