     let value2 = Int(arc4random() & 0x3fff_ffff)
     let deferred = Deferred(value: value1).apply(qos: QOS_CLASS_USER_INITIATED, Deferred(value: curriedSum(value2)))
     XCTAssert(deferred.value == value1+value2)
-  }
-
-  func testApply3()
+
+    // a 2-tuple is the same as two parameters
+    let transform = Deferred(value: powf)
+    let v1 = Deferred(value: 3.0)
+    let v2 = Deferred(value: 4.1)
+
+    let args = combine(v1.map(Float.init), v2.map(Float.init))
+    let result = args.apply(transform)
+
+    XCTAssert(result.value == pow(3.0, 4.1))
+  }
+
+  func testApply1()
   {
     let transform = TBD<(Int) -> Double>()
     let operand = TBD<Int>()

    usleep(1000)
    XCTAssert(d2.cancel() == true)

    try! tbd.determine(numericCast(arc4random() & 0x3fff_ffff))

    waitForExpectationsWithTimeout(1.0, handler: nil)

    XCTAssert(d3.error as? TestError == TestError(error))
  }

  func testApply()
  {
    // a simple curried function.
    func curriedSum(a: Int)(_ b: Int) -> Int
    {
      return a+b
