 						(Const 5)
             (Jump (Name other))
             (Label f)]))))
-(comment
-(deftest test-recursion-call
-  (let [t (tm/label)
-        f (tm/label)
-				v1 (tm/temp)
-        other (tm/label)
-				function (tm/label)
-        prog  (Seq [(Label other)
-                    (Conditional :< (BinaryOp :+ (ExpSeq (Statement (Const 3)) (Const 2)) (Temp v1) ) (Const 4)  (Name t) (Name f))
-                    (Label t)
-                    (Seq [(Call (Name function) [(BinaryOp :+  (ExpSeq (Seq [(Const 1) (Const 2)]) (Const 3)) (Const 4) ) (Const 5) ])])
+
+(deftest test-call
+  (let [t (tm/label)
+        f (tm/label)
+				v1 (tm/temp)
+        other (tm/label)
+				function (tm/label)
+        prog  (Seq [(Label other)
+                    (Conditional :< (BinaryOp :+ (ExpSeq [(Statement (Const 3))] (Const 2)) (Temp v1) ) (Const 4)  (Name t) (Name f))
+                    (Label t)
+                    (Seq [(Call (Name function) [(Const 5)]) ])
                     (Jump (Name other))
                     (Label f)])]
     (is (= (canon prog)
            [
             (Label other)
 						(Statement (Const 3))
-            (Conditional :< (BinaryOp :+ (Const 2) (Temp v1)) (Name t) (Name f))
-            (Label t)
+            (Conditional :< (BinaryOp :+ (Const 2) (Temp v1)) (Const 4) (Name t) (Name f))
+            (Label t)
+						(Call (Name function) [(Const 5)])
+            (Jump (Name other))
+            (Label f)]))))
+
+(comment
+(deftest test-recursion-call
+  (let [t (tm/label)
+        f (tm/label)
+				v1 (tm/temp)
+        other (tm/label)
+				function (tm/label)
+        prog  (Seq [(Label other)
+                    (Conditional :< (BinaryOp :+ (ExpSeq [(Statement (Const 3))] (Const 2)) (Temp v1) ) (Const 4)  (Name t) (Name f))
+                    (Label t)
+                    (Seq [(Call (Name function) [(BinaryOp :+  (ExpSeq [(Seq [(Const 1) (Const 2)])] (Const 3)) (Const 4) ) (Const 5) ])])
+                    (Jump (Name other))
+                    (Label f)])]
+    (is (= (canon prog)
+           [
+            (Label other)
+						(Statement (Const 3))
+            (Conditional :< (BinaryOp :+ (Const 2) (Temp v1)) (Const 4) (Name t) (Name f))
+            (Label t)
+						(Const 1)
+						(Const 2)
+						(Call (Name function) [(BinaryOp :+ (Const 3) (Const 4) ) (Const 5) ])
             (Jump (Name other))
             (Label f)]))))
 )
           5))))
)

(comment
 (deftest test-commute
  (let [s (Statement (Const 0))
        m (Move s (Const 2))

        prog (Seq [(Label other)
                   (Conditional :< (Const 3) (Const 4) (Name t) (Name f))
                   ])]))


(deftest test-simple
  (let [t (tm/label)
