* Pass simple test case.
* Handle loop which is not in canonical form * Helper fn runOpt() * add test case - failing