   (is (thrown? Error ((partial doubler-contract-no-ensures #(* 2 %)) -5))))
 
 
+(def doubler-contract-no-ensures-and-isolated-fn
+     (contract doubler 
+       [x]
+       :requires
+       pos?))
+
+(deftest doubler-contract-no-ensures-and-isolated-fn-test
+  (is (= 10 ((partial doubler-contract-no-ensures-and-isolated-fn #(* 2 %)) 5)))
+  (is (= 15 ((partial doubler-contract-no-ensures-and-isolated-fn #(* 3 %)) 5)))
+  (is (thrown? Error ((partial doubler-contract-no-ensures-and-isolated-fn #(* 2 %)) -5))))
+
+
 (deftest contract-test
   (doubler-contract-test)
   (doubler-contract-arity1-test)
   (doubler-contract-no-requires-test)
-  (doubler-contract-no-ensures-test))
+  (doubler-contract-no-ensures-test)
+  (doubler-contract-full-and-isolated-fn-test)
+  (doubler-contract-arity1-and-isolated-fn-test)
+  (doubler-contract-no-requires-and-isolated-fn-test)
+  (doubler-contract-no-ensures-and-isolated-fn-test))
 

  (is (thrown? Error ((partial doubler-contract-arity1 #(* 3 %)) 5)))
  (is (thrown? Error ((partial doubler-contract-arity1 #(* 2 %)) -5))))


(def doubler-contract-no-requires
     (contract doubler 

  (is (= 10 ((partial doubler-contract-full #(* 2 %)) 5)))
  (is (thrown? Error ((partial doubler-contract-full #(* 3 (+ %1 %2))) 2 3))))

(def doubler-contract-full-and-isolated-fn
     (contract doubler 
       [x]
       :requires
       pos?
       :ensures
       (= (* 2 x) %)

       [x y]
       :requires
       (pos? x)
       (pos? y)
       :ensures
       (= (* 2 (+ x y)) %)))

(deftest doubler-contract-full-and-isolated-fn-test
  (is (= 10 ((partial doubler-contract-full-and-isolated-fn #(* 2 (+ %1 %2))) 2 3)))
  (is (= 10 ((partial doubler-contract-full-and-isolated-fn #(+ %1 %1 %2 %2)) 2 3)))
  (is (= 10 ((partial doubler-contract-full-and-isolated-fn #(* 2 %)) 5)))
  (is (thrown? Error ((partial doubler-contract-full-and-isolated-fn #(* 3 (+ %1 %2))) 2 3))))


(def doubler-contract-arity1
     (contract doubler 
