Changeset 8d1ad36 for tests/list/dlist-insert-remove-2.cfa
- Timestamp:
- May 11, 2021, 9:14:26 PM (3 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 7d51ef8
- Parents:
- 4ab767a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tests/list/dlist-insert-remove-2.cfa
r4ab767a r8d1ad36 1432 1432 } 1433 1433 1434 1435 //////////////////////////////////////////////////////////// 1436 // 1437 // Section 4g 1438 // 1439 // Test cases of `isEmpty, `hasPrev, `hasNext, 1440 // try_pop_front, try_pop_back, modifications via `elems 1441 // 1442 // Example of call-side user code 1443 // 1444 //////////////////////////////////////////////////////////// 1445 1446 void test__accessor_cases__mary() { 1447 1448 mary m1 = {1.7}; 1449 mary m2 = {2.7}; 1450 mary m3 = {3.7}; 1451 1452 dlist(mary, mary) ml; assert( ml`isEmpty); 1453 1454 insert_last(ml, m1); assert(!ml`isEmpty); 1455 insert_last(ml, m2); assert(!ml`isEmpty); 1456 insert_last(ml, m3); assert(!ml`isEmpty); 1457 1458 mary & m1prev = m1`prev; 1459 mary & m1next = m1`next; 1460 mary & m2prev = m2`prev; 1461 mary & m2next = m2`next; 1462 mary & m3prev = m3`prev; 1463 mary & m3next = m3`next; 1464 1465 assert (&m1prev == 0p); 1466 assert (&m1next == &m2); 1467 assert (&m2prev == &m1); 1468 assert (&m2next == &m3); 1469 assert (&m3prev == &m2); 1470 assert (&m3next == 0p); 1471 1472 assert(!m1`hasPrev); 1473 assert( m1`hasNext); 1474 assert( m2`hasPrev); 1475 assert( m2`hasNext); 1476 assert( m3`hasPrev); 1477 assert(!m3`hasNext); 1478 1479 printf("accessor_cases done\n"); 1480 } 1481 1482 void test__try_pop__mary() { 1483 1484 mary m1 = {1.7}; 1485 mary m2 = {2.7}; 1486 mary m3 = {3.7}; 1487 1488 dlist(mary, mary) ml; 1489 1490 mary &m1r = *0p; 1491 mary &m2r = *0p; 1492 mary &m3r = *0p; 1493 mary &mxr = *0p; 1494 1495 // queue, back to front 1496 1497 assert( ml`isEmpty); 1498 1499 insert_last(ml, m1); 1500 insert_last(ml, m2); 1501 insert_last(ml, m3); 1502 1503 &m1r = & try_pop_front(ml); assert(!ml`isEmpty); 1504 &m2r = & try_pop_front(ml); assert(!ml`isEmpty); 1505 &m3r = & try_pop_front(ml); assert( ml`isEmpty); 1506 &mxr = & try_pop_front(ml); assert( ml`isEmpty); 1507 1508 assert( &m1r == &m1 ); 1509 assert( &m2r == &m2 ); 1510 assert( &m3r == &m3 ); 1511 assert( &mxr == 0p ); 1512 1513 &m1r = 0p; 1514 &m2r = 0p; 1515 &m3r = 0p; 1516 1517 // queue, front to back 1518 1519 assert( ml`isEmpty); 1520 1521 insert_first(ml, m1); 1522 insert_first(ml, m2); 1523 insert_first(ml, m3); 1524 1525 &m1r = & try_pop_back(ml); assert(!ml`isEmpty); 1526 &m2r = & try_pop_back(ml); assert(!ml`isEmpty); 1527 &m3r = & try_pop_back(ml); assert( ml`isEmpty); 1528 &mxr = & try_pop_back(ml); assert( ml`isEmpty); 1529 1530 assert( &m1r == &m1 ); 1531 assert( &m2r == &m2 ); 1532 assert( &m3r == &m3 ); 1533 assert( &mxr == 0p ); 1534 1535 &m1r = 0p; 1536 &m2r = 0p; 1537 &m3r = 0p; 1538 1539 // stack at front 1540 1541 assert( ml`isEmpty); 1542 1543 insert_first(ml, m1); 1544 insert_first(ml, m2); 1545 insert_first(ml, m3); 1546 1547 &m3r = & try_pop_front(ml); assert(!ml`isEmpty); 1548 &m2r = & try_pop_front(ml); assert(!ml`isEmpty); 1549 &m1r = & try_pop_front(ml); assert( ml`isEmpty); 1550 &mxr = & try_pop_front(ml); assert( ml`isEmpty); 1551 1552 assert( &m1r == &m1 ); 1553 assert( &m2r == &m2 ); 1554 assert( &m3r == &m3 ); 1555 assert( &mxr == 0p ); 1556 1557 &m1r = 0p; 1558 &m2r = 0p; 1559 &m3r = 0p; 1560 1561 // stack at back 1562 1563 assert( ml`isEmpty); 1564 1565 insert_last(ml, m1); 1566 insert_last(ml, m2); 1567 insert_last(ml, m3); 1568 1569 &m3r = & try_pop_back(ml); assert(!ml`isEmpty); 1570 &m2r = & try_pop_back(ml); assert(!ml`isEmpty); 1571 &m1r = & try_pop_back(ml); assert( ml`isEmpty); 1572 &mxr = & try_pop_back(ml); assert( ml`isEmpty); 1573 1574 assert( &m1r == &m1 ); 1575 assert( &m2r == &m2 ); 1576 assert( &m3r == &m3 ); 1577 assert( &mxr == 0p ); 1578 1579 &m1r = 0p; 1580 &m2r = 0p; 1581 &m3r = 0p; 1582 1583 printf("try_pop cases done\n"); 1584 } 1585 1586 void test__origin_mutation__mary() { 1587 1588 mary m1 = {1.7}; 1589 1590 dlist(mary, mary) ml; 1591 mary & mlorigin = ml`elems; 1592 1593 // insert before the origin 1594 1595 insert_before( ml`elems, m1 ); 1596 assert( ! ml`isEmpty ); 1597 1598 mary & mlfirst = ml`first; 1599 mary & mllast = ml`last; 1600 1601 assert( &m1 == & mlfirst ); 1602 assert( &m1 == & mllast ); 1603 1604 // moveNext after last goes back to origin, &vv 1605 1606 bool canMoveNext = mllast`moveNext; 1607 bool canMovePrev = mlfirst`movePrev; 1608 1609 assert( ! canMoveNext ); 1610 assert( ! canMovePrev ); 1611 1612 assert( &mlorigin == & mlfirst ); 1613 assert( &mlorigin == & mllast ); 1614 1615 printf("origin_mutation cases done\n"); 1616 } 1617 1434 1618 //////////////////////////////////////////////////////////// 1435 1619 // … … 1708 1892 test__pop_last__maries(); 1709 1893 1894 sout | ""; 1895 sout | "~~~~~~~~~~~~~~~~~~~ Ease-of-access cases ~~~~~~~~~~~~~~~~~~"; 1896 sout | ""; 1897 1898 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1899 sout | "Test 18-i. Modifying Freds on MINE"; 1900 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1901 sout | "Not implmented"; 1902 1903 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1904 sout | "Test 18-ii. Modifying Freds on YOURS"; 1905 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1906 sout | "Not implmented"; 1907 1908 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1909 sout | "Test 18-iii. Modifying Maries"; 1910 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1911 1912 test__accessor_cases__mary(); 1913 test__try_pop__mary(); 1914 test__origin_mutation__mary(); 1915 1710 1916 return 0; 1711 1917 }
Note: See TracChangeset
for help on using the changeset viewer.