ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/CompletableFutureTest.java
(Generate patch)

Comparing jsr166/src/test/tck/CompletableFutureTest.java (file contents):
Revision 1.90 by jsr166, Tue Jun 17 18:09:28 2014 UTC vs.
Revision 1.94 by jsr166, Wed Jun 18 02:37:38 2014 UTC

# Line 1370 | Line 1370 | public class CompletableFutureTest exten
1370          final CompletableFuture<Void> h0 = m.thenRun(f, rs[0]);
1371          final CompletableFuture<Void> h1 = m.runAfterBoth(f, f, rs[1]);
1372          final CompletableFuture<Void> h2 = m.runAfterEither(f, f, rs[2]);
1373        final FailingRunnable r = new FailingRunnable(m);
1373          assertTrue(f.complete(v1));
1374          final CompletableFuture<Void> h3 = m.thenRun(f, rs[3]);
1375          final CompletableFuture<Void> h4 = m.runAfterBoth(f, f, rs[4]);
# Line 1390 | Line 1389 | public class CompletableFutureTest exten
1389       */
1390      public void testThenApply_normalCompletion() {
1391          for (ExecutionMode m : ExecutionMode.values())
1393        for (boolean createIncomplete : new boolean[] { true, false })
1392          for (Integer v1 : new Integer[] { 1, null })
1393      {
1394          final CompletableFuture<Integer> f = new CompletableFuture<>();
1395 <        final IncFunction r = new IncFunction(m);
1396 <        if (!createIncomplete) assertTrue(f.complete(v1));
1399 <        final CompletableFuture<Integer> g = m.thenApply(f, r);
1400 <        if (createIncomplete) {
1401 <            checkIncomplete(g);
1402 <            assertTrue(f.complete(v1));
1403 <        }
1395 >        final IncFunction[] rs = new IncFunction[4];
1396 >        for (int i = 0; i < rs.length; i++) rs[i] = new IncFunction(m);
1397  
1398 <        checkCompletedNormally(g, inc(v1));
1398 >        final CompletableFuture<Integer> h0 = m.thenApply(f, rs[0]);
1399 >        final CompletableFuture<Integer> h1 = m.applyToEither(f, f, rs[1]);
1400 >        checkIncomplete(h0);
1401 >        checkIncomplete(h1);
1402 >        assertTrue(f.complete(v1));
1403 >        final CompletableFuture<Integer> h2 = m.thenApply(f, rs[2]);
1404 >        final CompletableFuture<Integer> h3 = m.applyToEither(f, f, rs[3]);
1405 >
1406 >        checkCompletedNormally(h0, inc(v1));
1407 >        checkCompletedNormally(h1, inc(v1));
1408 >        checkCompletedNormally(h2, inc(v1));
1409 >        checkCompletedNormally(h3, inc(v1));
1410          checkCompletedNormally(f, v1);
1411 <        r.assertValue(inc(v1));
1411 >        for (IncFunction r : rs) r.assertValue(inc(v1));
1412      }}
1413  
1414      /**
# Line 1413 | Line 1417 | public class CompletableFutureTest exten
1417       */
1418      public void testThenApply_exceptionalCompletion() {
1419          for (ExecutionMode m : ExecutionMode.values())
1416        for (boolean createIncomplete : new boolean[] { true, false })
1420      {
1421          final CFException ex = new CFException();
1422          final CompletableFuture<Integer> f = new CompletableFuture<>();
1423 <        final IncFunction r = new IncFunction(m);
1424 <        if (!createIncomplete) f.completeExceptionally(ex);
1422 <        final CompletableFuture<Integer> g = m.thenApply(f, r);
1423 <        if (createIncomplete) {
1424 <            checkIncomplete(g);
1425 <            f.completeExceptionally(ex);
1426 <        }
1423 >        final IncFunction[] rs = new IncFunction[4];
1424 >        for (int i = 0; i < rs.length; i++) rs[i] = new IncFunction(m);
1425  
1426 <        checkCompletedWithWrappedException(g, ex);
1426 >        final CompletableFuture<Integer> h0 = m.thenApply(f, rs[0]);
1427 >        final CompletableFuture<Integer> h1 = m.applyToEither(f, f, rs[1]);
1428 >        assertTrue(f.completeExceptionally(ex));
1429 >        final CompletableFuture<Integer> h2 = m.thenApply(f, rs[2]);
1430 >        final CompletableFuture<Integer> h3 = m.applyToEither(f, f, rs[3]);
1431 >
1432 >        checkCompletedWithWrappedException(h0, ex);
1433 >        checkCompletedWithWrappedException(h1, ex);
1434 >        checkCompletedWithWrappedException(h2, ex);
1435 >        checkCompletedWithWrappedException(h3, ex);
1436          checkCompletedExceptionally(f, ex);
1437 <        r.assertNotInvoked();
1437 >        for (IncFunction r : rs) r.assertNotInvoked();
1438      }}
1439  
1440      /**
# Line 1435 | Line 1442 | public class CompletableFutureTest exten
1442       */
1443      public void testThenApply_sourceCancelled() {
1444          for (ExecutionMode m : ExecutionMode.values())
1438        for (boolean createIncomplete : new boolean[] { true, false })
1445          for (boolean mayInterruptIfRunning : new boolean[] { true, false })
1446      {
1447          final CompletableFuture<Integer> f = new CompletableFuture<>();
1448 <        final IncFunction r = new IncFunction(m);
1449 <        if (!createIncomplete) assertTrue(f.cancel(mayInterruptIfRunning));
1444 <        final CompletableFuture<Integer> g = m.thenApply(f, r);
1445 <        if (createIncomplete) {
1446 <            checkIncomplete(g);
1447 <            assertTrue(f.cancel(mayInterruptIfRunning));
1448 <        }
1448 >        final IncFunction[] rs = new IncFunction[4];
1449 >        for (int i = 0; i < rs.length; i++) rs[i] = new IncFunction(m);
1450  
1451 <        checkCompletedWithWrappedCancellationException(g);
1451 >        final CompletableFuture<Integer> h0 = m.thenApply(f, rs[0]);
1452 >        final CompletableFuture<Integer> h1 = m.applyToEither(f, f, rs[1]);
1453 >        assertTrue(f.cancel(mayInterruptIfRunning));
1454 >        final CompletableFuture<Integer> h2 = m.thenApply(f, rs[2]);
1455 >        final CompletableFuture<Integer> h3 = m.applyToEither(f, f, rs[3]);
1456 >
1457 >        checkCompletedWithWrappedCancellationException(h0);
1458 >        checkCompletedWithWrappedCancellationException(h1);
1459 >        checkCompletedWithWrappedCancellationException(h2);
1460 >        checkCompletedWithWrappedCancellationException(h3);
1461          checkCancelled(f);
1462 <        r.assertNotInvoked();
1462 >        for (IncFunction r : rs) r.assertNotInvoked();
1463      }}
1464  
1465      /**
# Line 1457 | Line 1467 | public class CompletableFutureTest exten
1467       */
1468      public void testThenApply_actionFailed() {
1469          for (ExecutionMode m : ExecutionMode.values())
1460        for (boolean createIncomplete : new boolean[] { true, false })
1470          for (Integer v1 : new Integer[] { 1, null })
1471      {
1472          final CompletableFuture<Integer> f = new CompletableFuture<>();
1473 <        final FailingFunction r = new FailingFunction(m);
1474 <        if (!createIncomplete) assertTrue(f.complete(v1));
1475 <        final CompletableFuture<Integer> g = m.thenApply(f, r);
1476 <        if (createIncomplete) {
1477 <            checkIncomplete(g);
1478 <            assertTrue(f.complete(v1));
1479 <        }
1473 >        final FailingFunction[] rs = new FailingFunction[4];
1474 >        for (int i = 0; i < rs.length; i++) rs[i] = new FailingFunction(m);
1475 >
1476 >        final CompletableFuture<Integer> h0 = m.thenApply(f, rs[0]);
1477 >        final CompletableFuture<Integer> h1 = m.applyToEither(f, f, rs[1]);
1478 >        assertTrue(f.complete(v1));
1479 >        final CompletableFuture<Integer> h2 = m.thenApply(f, rs[2]);
1480 >        final CompletableFuture<Integer> h3 = m.applyToEither(f, f, rs[3]);
1481  
1482 <        checkCompletedWithWrappedCFException(g);
1482 >        checkCompletedWithWrappedCFException(h0);
1483 >        checkCompletedWithWrappedCFException(h1);
1484 >        checkCompletedWithWrappedCFException(h2);
1485 >        checkCompletedWithWrappedCFException(h3);
1486          checkCompletedNormally(f, v1);
1487      }}
1488  
# Line 1478 | Line 1491 | public class CompletableFutureTest exten
1491       */
1492      public void testThenAccept_normalCompletion() {
1493          for (ExecutionMode m : ExecutionMode.values())
1481        for (boolean createIncomplete : new boolean[] { true, false })
1494          for (Integer v1 : new Integer[] { 1, null })
1495      {
1496          final CompletableFuture<Integer> f = new CompletableFuture<>();
1497 <        final NoopConsumer r = new NoopConsumer(m);
1498 <        if (!createIncomplete) assertTrue(f.complete(v1));
1499 <        final CompletableFuture<Void> g = m.thenAccept(f, r);
1500 <        if (createIncomplete) {
1501 <            checkIncomplete(g);
1502 <            assertTrue(f.complete(v1));
1503 <        }
1497 >        final NoopConsumer[] rs = new NoopConsumer[4];
1498 >        for (int i = 0; i < rs.length; i++) rs[i] = new NoopConsumer(m);
1499 >
1500 >        final CompletableFuture<Void> h0 = m.thenAccept(f, rs[0]);
1501 >        final CompletableFuture<Void> h1 = m.acceptEither(f, f, rs[1]);
1502 >        checkIncomplete(h0);
1503 >        checkIncomplete(h1);
1504 >        assertTrue(f.complete(v1));
1505 >        final CompletableFuture<Void> h2 = m.thenAccept(f, rs[2]);
1506 >        final CompletableFuture<Void> h3 = m.acceptEither(f, f, rs[3]);
1507  
1508 <        checkCompletedNormally(g, null);
1509 <        r.assertValue(v1);
1508 >        checkCompletedNormally(h0, null);
1509 >        checkCompletedNormally(h1, null);
1510 >        checkCompletedNormally(h2, null);
1511 >        checkCompletedNormally(h3, null);
1512          checkCompletedNormally(f, v1);
1513 +        for (NoopConsumer r : rs) r.assertValue(v1);
1514      }}
1515  
1516      /**
# Line 1501 | Line 1519 | public class CompletableFutureTest exten
1519       */
1520      public void testThenAccept_exceptionalCompletion() {
1521          for (ExecutionMode m : ExecutionMode.values())
1504        for (boolean createIncomplete : new boolean[] { true, false })
1522      {
1523          final CFException ex = new CFException();
1524          final CompletableFuture<Integer> f = new CompletableFuture<>();
1525 <        final NoopConsumer r = new NoopConsumer(m);
1526 <        if (!createIncomplete) f.completeExceptionally(ex);
1510 <        final CompletableFuture<Void> g = m.thenAccept(f, r);
1511 <        if (createIncomplete) {
1512 <            checkIncomplete(g);
1513 <            f.completeExceptionally(ex);
1514 <        }
1525 >        final NoopConsumer[] rs = new NoopConsumer[4];
1526 >        for (int i = 0; i < rs.length; i++) rs[i] = new NoopConsumer(m);
1527  
1528 <        checkCompletedWithWrappedException(g, ex);
1528 >        final CompletableFuture<Void> h0 = m.thenAccept(f, rs[0]);
1529 >        final CompletableFuture<Void> h1 = m.acceptEither(f, f, rs[1]);
1530 >        assertTrue(f.completeExceptionally(ex));
1531 >        final CompletableFuture<Void> h2 = m.thenAccept(f, rs[2]);
1532 >        final CompletableFuture<Void> h3 = m.acceptEither(f, f, rs[3]);
1533 >
1534 >        checkCompletedWithWrappedException(h0, ex);
1535 >        checkCompletedWithWrappedException(h1, ex);
1536 >        checkCompletedWithWrappedException(h2, ex);
1537 >        checkCompletedWithWrappedException(h3, ex);
1538          checkCompletedExceptionally(f, ex);
1539 <        r.assertNotInvoked();
1539 >        for (NoopConsumer r : rs) r.assertNotInvoked();
1540      }}
1541  
1542      /**
# Line 1523 | Line 1544 | public class CompletableFutureTest exten
1544       */
1545      public void testThenAccept_sourceCancelled() {
1546          for (ExecutionMode m : ExecutionMode.values())
1526        for (boolean createIncomplete : new boolean[] { true, false })
1547          for (boolean mayInterruptIfRunning : new boolean[] { true, false })
1548      {
1549          final CompletableFuture<Integer> f = new CompletableFuture<>();
1550 <        final NoopConsumer r = new NoopConsumer(m);
1551 <        if (!createIncomplete) assertTrue(f.cancel(mayInterruptIfRunning));
1532 <        final CompletableFuture<Void> g = m.thenAccept(f, r);
1533 <        if (createIncomplete) {
1534 <            checkIncomplete(g);
1535 <            assertTrue(f.cancel(mayInterruptIfRunning));
1536 <        }
1550 >        final NoopConsumer[] rs = new NoopConsumer[4];
1551 >        for (int i = 0; i < rs.length; i++) rs[i] = new NoopConsumer(m);
1552  
1553 <        checkCompletedWithWrappedCancellationException(g);
1553 >        final CompletableFuture<Void> h0 = m.thenAccept(f, rs[0]);
1554 >        final CompletableFuture<Void> h1 = m.acceptEither(f, f, rs[1]);
1555 >        assertTrue(f.cancel(mayInterruptIfRunning));
1556 >        final CompletableFuture<Void> h2 = m.thenAccept(f, rs[2]);
1557 >        final CompletableFuture<Void> h3 = m.acceptEither(f, f, rs[3]);
1558 >
1559 >        checkCompletedWithWrappedCancellationException(h0);
1560 >        checkCompletedWithWrappedCancellationException(h1);
1561 >        checkCompletedWithWrappedCancellationException(h2);
1562 >        checkCompletedWithWrappedCancellationException(h3);
1563          checkCancelled(f);
1564 <        r.assertNotInvoked();
1564 >        for (NoopConsumer r : rs) r.assertNotInvoked();
1565      }}
1566  
1567      /**
# Line 1545 | Line 1569 | public class CompletableFutureTest exten
1569       */
1570      public void testThenAccept_actionFailed() {
1571          for (ExecutionMode m : ExecutionMode.values())
1548        for (boolean createIncomplete : new boolean[] { true, false })
1572          for (Integer v1 : new Integer[] { 1, null })
1573      {
1574          final CompletableFuture<Integer> f = new CompletableFuture<>();
1575 <        final FailingConsumer r = new FailingConsumer(m);
1576 <        if (!createIncomplete) f.complete(v1);
1554 <        final CompletableFuture<Void> g = m.thenAccept(f, r);
1555 <        if (createIncomplete) {
1556 <            checkIncomplete(g);
1557 <            f.complete(v1);
1558 <        }
1575 >        final FailingConsumer[] rs = new FailingConsumer[4];
1576 >        for (int i = 0; i < rs.length; i++) rs[i] = new FailingConsumer(m);
1577  
1578 <        checkCompletedWithWrappedCFException(g);
1578 >        final CompletableFuture<Void> h0 = m.thenAccept(f, rs[0]);
1579 >        final CompletableFuture<Void> h1 = m.acceptEither(f, f, rs[1]);
1580 >        assertTrue(f.complete(v1));
1581 >        final CompletableFuture<Void> h2 = m.thenAccept(f, rs[2]);
1582 >        final CompletableFuture<Void> h3 = m.acceptEither(f, f, rs[3]);
1583 >
1584 >        checkCompletedWithWrappedCFException(h0);
1585 >        checkCompletedWithWrappedCFException(h1);
1586 >        checkCompletedWithWrappedCFException(h2);
1587 >        checkCompletedWithWrappedCFException(h3);
1588          checkCompletedNormally(f, v1);
1589      }}
1590  
# Line 1573 | Line 1600 | public class CompletableFutureTest exten
1600      {
1601          final CompletableFuture<Integer> f = new CompletableFuture<>();
1602          final CompletableFuture<Integer> g = new CompletableFuture<>();
1603 <        final SubtractFunction r1 = new SubtractFunction(m);
1604 <        final SubtractFunction r2 = new SubtractFunction(m);
1578 <        final SubtractFunction r3 = new SubtractFunction(m);
1603 >        final SubtractFunction[] rs = new SubtractFunction[6];
1604 >        for (int i = 0; i < rs.length; i++) rs[i] = new SubtractFunction(m);
1605  
1606          final CompletableFuture<Integer> fst =  fFirst ? f : g;
1607          final CompletableFuture<Integer> snd = !fFirst ? f : g;
1608          final Integer w1 =  fFirst ? v1 : v2;
1609          final Integer w2 = !fFirst ? v1 : v2;
1610  
1611 <        final CompletableFuture<Integer> h1 = m.thenCombine(f, g, r1);
1611 >        final CompletableFuture<Integer> h0 = m.thenCombine(f, g, rs[0]);
1612 >        final CompletableFuture<Integer> h1 = m.thenCombine(fst, fst, rs[1]);
1613          assertTrue(fst.complete(w1));
1614 <        final CompletableFuture<Integer> h2 = m.thenCombine(f, g, r2);
1615 <        checkIncomplete(h1);
1616 <        checkIncomplete(h2);
1617 <        r1.assertNotInvoked();
1618 <        r2.assertNotInvoked();
1614 >        final CompletableFuture<Integer> h2 = m.thenCombine(f, g, rs[2]);
1615 >        final CompletableFuture<Integer> h3 = m.thenCombine(fst, fst, rs[3]);
1616 >        checkIncomplete(h0); rs[0].assertNotInvoked();
1617 >        checkIncomplete(h2); rs[2].assertNotInvoked();
1618 >        checkCompletedNormally(h1, subtract(w1, w1));
1619 >        checkCompletedNormally(h3, subtract(w1, w1));
1620 >        rs[1].assertValue(subtract(w1, w1));
1621 >        rs[3].assertValue(subtract(w1, w1));
1622          assertTrue(snd.complete(w2));
1623 <        final CompletableFuture<Integer> h3 = m.thenCombine(f, g, r3);
1623 >        final CompletableFuture<Integer> h4 = m.thenCombine(f, g, rs[4]);
1624  
1625 <        checkCompletedNormally(h1, subtract(v1, v2));
1625 >        checkCompletedNormally(h0, subtract(v1, v2));
1626          checkCompletedNormally(h2, subtract(v1, v2));
1627 <        checkCompletedNormally(h3, subtract(v1, v2));
1628 <        r1.assertValue(subtract(v1, v2));
1629 <        r2.assertValue(subtract(v1, v2));
1630 <        r3.assertValue(subtract(v1, v2));
1627 >        checkCompletedNormally(h4, subtract(v1, v2));
1628 >        rs[0].assertValue(subtract(v1, v2));
1629 >        rs[2].assertValue(subtract(v1, v2));
1630 >        rs[4].assertValue(subtract(v1, v2));
1631 >
1632          checkCompletedNormally(f, v1);
1633          checkCompletedNormally(g, v2);
1634      }}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines