Changeset 69914cbc for tests/list/dlist-insert-remove.cfa
- Timestamp:
- May 12, 2021, 4:30:27 PM (2 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- e2f601f
- Parents:
- 67b421c
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tests/list/dlist-insert-remove.cfa
r67b421c r69914cbc 19 19 struct fred { 20 20 float adatum; 21 DLISTED_MGD_EXPL_IN(fred, mine)22 DLISTED_MGD_EXPL_IN(fred, yours)21 inline struct mine { inline dlink(fred); }; 22 inline struct yours { inline dlink(fred); }; 23 23 }; 24 25 DLISTED_MGD_EXPL_OUT(fred, mine) 26 DLISTED_MGD_EXPL_OUT(fred, yours) 24 P9_EMBEDDED(fred, fred.mine) 25 P9_EMBEDDED(fred, fred.yours) 26 P9_EMBEDDED(fred.mine, dlink(fred)) 27 P9_EMBEDDED(fred.yours, dlink(fred)) 28 27 29 28 30 void ?{}(fred &this, float adatum) { … … 33 35 struct mary { 34 36 float anotherdatum; 35 DLISTED_MGD_IMPL_IN(mary)37 inline dlink(mary); 36 38 }; 37 39 38 DLISTED_MGD_IMPL_OUT(mary)40 P9_EMBEDDED(mary, dlink(mary)) 39 41 40 42 void ?{}(mary &this, float anotherdatum) { … … 53 55 //////////////////////////////////////////////////////////// 54 56 55 void printMyFredsFwd(fred &f) { 56 while (&f != 0p) { 57 void printMyFredsFwd(fred & f) { 58 with( DLINK_VIA( fred, fred.mine ) ) 59 do { 57 60 sout | f.adatum; 58 &f = &f`in_mine`next;59 60 } 61 62 void printMyFredsRev(fred &f) { 63 while (&f != 0p){61 } while (f`moveNext); 62 } 63 64 void printMyFredsRev(fred & f) { 65 with( DLINK_VIA( fred, fred.mine ) ) 66 do { 64 67 sout | f.adatum; 65 &f = &f`in_mine`prev;66 67 } 68 } while (f`movePrev); 69 } 70 68 71 69 72 void printMyFreddies(fred &f1, fred &f2, int isBefore) { … … 73 76 sout | "==== fred by MINE after "; 74 77 } 75 printMyFredsFwd(f1); sout | '-'; 76 printMyFredsRev(f1); sout | '-'; 77 printMyFredsFwd(f2); sout | '-'; 78 printMyFredsRev(f2); sout | '-'; 79 } 80 81 void printYourFredsFwd(fred &f) { 82 while (&f != 0p) { 78 if (&f1) { 79 printMyFredsFwd(f1); sout | '-'; 80 printMyFredsRev(f1); sout | '-'; 81 } else { 82 sout | '-'; sout | '-'; 83 } 84 if (&f2) { 85 printMyFredsFwd(f2); sout | '-'; 86 printMyFredsRev(f2); sout | '-'; 87 } else { 88 sout | '-'; sout | '-'; 89 } 90 } 91 92 void printYourFredsFwd(fred & f) { 93 with( DLINK_VIA( fred, fred.yours ) ) 94 do { 83 95 sout | f.adatum; 84 &f = &f`in_yours`next;85 86 } 87 88 void printYourFredsRev(fred &f) { 89 while (&f != 0p){96 } while (f`moveNext); 97 } 98 99 void printYourFredsRev(fred & f) { 100 with( DLINK_VIA( fred, fred.yours ) ) 101 do { 90 102 sout | f.adatum; 91 &f = &f`in_yours`prev; 92 } 103 } while (f`movePrev); 93 104 } 94 105 … … 99 110 sout | "==== fred by YOURS after "; 100 111 } 101 printYourFredsFwd(f1); sout | '-'; 102 printYourFredsRev(f1); sout | '-'; 103 printYourFredsFwd(f2); sout | '-'; 104 printYourFredsRev(f2); sout | '-'; 112 if (&f1) { 113 printYourFredsFwd(f1); sout | '-'; 114 printYourFredsRev(f1); sout | '-'; 115 } else { 116 sout | '-'; sout | '-'; 117 } 118 if (&f2) { 119 printYourFredsFwd(f2); sout | '-'; 120 printYourFredsRev(f2); sout | '-'; 121 } else { 122 sout | '-'; sout | '-'; 123 } 105 124 } 106 125 107 126 void printMariesFwd(mary &m) { 108 while (&m != 0p){127 do { 109 128 sout | m.anotherdatum; 110 &m = &m`next; 111 } 129 } while (m`moveNext); 112 130 } 113 131 114 132 void printMariesRev(mary &m) { 115 while (&m != 0p){133 do { 116 134 sout | m.anotherdatum; 117 &m = &m`prev; 118 } 135 } while (m`movePrev); 119 136 } 120 137 … … 125 142 sout | "==== mary after "; 126 143 } 127 printMariesFwd(m1); sout | '-'; 128 printMariesRev(m1); sout | '-'; 129 printMariesFwd(m2); sout | '-'; 130 printMariesRev(m2); sout | '-'; 144 if (&m1) { 145 printMariesFwd(m1); sout | '-'; 146 printMariesRev(m1); sout | '-'; 147 } else { 148 sout | '-'; sout | '-'; 149 } 150 if (&m2) { 151 printMariesFwd(m2); sout | '-'; 152 printMariesRev(m2); sout | '-'; 153 } else { 154 sout | '-'; sout | '-'; 155 } 131 156 } 132 157 … … 153 178 // - from list position #2 moving backward (d) 154 179 // The expected-output comments are in form a;b;c;d where a::=num,num,num 155 180 #if 0 156 181 void test__insertafter_singleton_on_singleton__fred_mine () { 157 182 fred f1 = {3.14}; … … 161 186 printYourFreddies(f1, f2, 1); // 3.14; 3.14; 0.5; 0.5 162 187 163 insert_after(f1`in_mine, f2); 188 diref(fred, fred.mine) f1_mine = f1`from; 189 insert_after(f1_mine, f2); 164 190 165 191 printMyFreddies(f1, f2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) … … 174 200 printYourFreddies(f1, f2, 1); // 3.14; 3.14; 0.5; 0.5 175 201 176 insert_after(f1`in_yours, f2); 202 diref(fred, fred.yours) f1_yours = f1`from; 203 insert_after(f1_yours, f2); 177 204 178 205 printMyFreddies(f1, f2, 0); // 3.14; 3.14; 0.5; 0.5 (unmodified) … … 208 235 printYourFreddies(f1, f2, 1); // 3.14; 3.14; 0.5; 0.5 209 236 210 insert_before(f2`in_mine, f1); 237 diref(fred, fred.mine) f2_mine = f2`from; 238 insert_before(f2_mine, f1); 211 239 212 240 printMyFreddies(f1, f2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) … … 221 249 printYourFreddies(f1, f2, 1); // 3.14; 3.14; 0.5; 0.5 222 250 223 insert_before(f2`in_yours, f1); 251 diref(fred, fred.yours) f2_yours = f2`from; 252 insert_before(f2_yours, f1); 224 253 225 254 printMyFreddies(f1, f2, 0); // 3.14; 3.14; 0.5; 0.5 (unmodified) … … 237 266 printMariatheotokos(m1, m2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) 238 267 } 239 268 #endif 240 269 //////////////////////////////////////////////////////////// 241 270 // … … 250 279 // All three tests exercise the case of creating an empty container and 251 280 // adding two items to it. 252 253 281 void test__insertfirst_two_on_empty__fred_mine() { 254 282 … … 256 284 fred f2 = {0.5}; 257 285 258 dlist(fred _in_mine, fred) lf;286 dlist(fred, fred.mine) lf; 259 287 260 288 verify(validate(lf)); … … 277 305 fred f2 = {0.5}; 278 306 279 dlist(fred _in_yours, fred) lf;307 dlist(fred, fred.yours) lf; 280 308 281 309 verify(validate(lf)); … … 292 320 printYourFreddies(f1, f2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) 293 321 } 294 295 322 void test__insertfirst_two_on_empty__mary() { 296 323 … … 298 325 mary m2 = {0.5}; 299 326 300 dlist(mary , mary) lm;327 dlist(mary) lm; 301 328 302 329 verify(validate(lm)); … … 325 352 fred f2 = {0.5}; 326 353 327 dlist(fred _in_mine, fred) lf;354 dlist(fred, fred.mine) lf; 328 355 329 356 verify(validate(lf)); … … 346 373 fred f2 = {0.5}; 347 374 348 dlist(fred _in_yours, fred) lf;375 dlist(fred, fred.yours) lf; 349 376 350 377 verify(validate(lf)); … … 367 394 mary m2 = {0.5}; 368 395 369 dlist(mary , mary) lm;396 dlist(mary) lm; 370 397 371 398 verify(validate(lm)); … … 394 421 fred f2 = {0.5}; 395 422 396 dlist(fred _in_mine, fred) lf;397 398 assert( & lf`first == 0p);399 assert( & lf`last == 0p);423 dlist(fred, fred.mine) lf; 424 425 assert( & lf`first == 0p ); 426 assert( & lf`last == 0p ); 400 427 401 428 insert_first(lf, f1); 402 429 403 assert( & lf`first == & f1);404 assert( & lf`last == & f1);430 assert( & lf`first == & f1 ); 431 assert( & lf`last == & f1 ); 405 432 406 433 verify(validate(lf)); 407 434 408 insert_after(f1`in_mine, f2);435 with ( DLINK_VIA(fred, fred.mine) ) insert_after(f1, f2); 409 436 410 437 verify(validate(lf)); … … 413 440 printYourFreddies(f1, f2, 0); // 3.14; 3.14; 0.5; 0.5 (unmodified) 414 441 415 assert( & lf`first == & f1);416 assert( & lf`last == & f2);442 assert( & lf`first == & f1 ); 443 assert( & lf`last == & f2 ); 417 444 } 418 445 … … 422 449 fred f2 = {0.5}; 423 450 424 dlist(fred _in_yours, fred) lf;425 426 assert( & lf`first == 0p);427 assert( & lf`last == 0p);451 dlist(fred, fred.yours) lf; 452 453 assert( & lf`first == 0p ); 454 assert( & lf`last == 0p ); 428 455 429 456 insert_first(lf, f1); 430 457 431 assert( & lf`first == & f1);432 assert( & lf`last == & f1);458 assert( & lf`first == & f1 ); 459 assert( & lf`last == & f1 ); 433 460 434 461 verify(validate(lf)); 435 462 436 insert_after(f1`in_yours, f2);463 with ( DLINK_VIA(fred, fred.yours) ) insert_after(f1, f2); 437 464 438 465 verify(validate(lf)); … … 441 468 printYourFreddies(f1, f2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) 442 469 443 assert( & lf`first == & f1);444 assert( & lf`last == & f2);470 assert( & lf`first == & f1 ); 471 assert( & lf`last == & f2 ); 445 472 } 446 473 … … 450 477 mary m2 = {0.5}; 451 478 452 dlist(mary , mary) lm;453 454 assert( & lm`first == 0p);455 assert( & lm`last == 0p);479 dlist(mary) lm; 480 481 assert( & lm`first == 0p ); 482 assert( & lm`last == 0p ); 456 483 457 484 insert_first(lm, m1); 458 485 459 assert( & lm`first == & m1);460 assert( & lm`last == & m1);486 assert( & lm`first == & m1 ); 487 assert( & lm`last == & m1 ); 461 488 462 489 verify(validate(lm)); … … 468 495 printMariatheotokos(m1, m2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) 469 496 470 assert( & lm`first == & m1);471 assert( & lm`last == & m2);497 assert( & lm`first == & m1 ); 498 assert( & lm`last == & m2 ); 472 499 } 473 500 … … 487 514 fred f2 = {0.5}; 488 515 489 dlist(fred _in_mine, fred) lf;490 491 assert( & lf`first == 0p);492 assert( & lf`last == 0p);516 dlist(fred, fred.mine) lf; 517 518 assert( & lf`first == 0p ); 519 assert( & lf`last == 0p ); 493 520 494 521 insert_last(lf, f2); 495 522 496 assert( & lf`first == & f2);497 assert( & lf`last == & f2);523 assert( & lf`first == & f2 ); 524 assert( & lf`last == & f2 ); 498 525 499 526 verify(validate(lf)); 500 527 501 insert_before(f2`in_mine, f1);528 with ( DLINK_VIA(fred, fred.mine) ) insert_before(f2, f1); 502 529 503 530 verify(validate(lf)); … … 506 533 printYourFreddies(f1, f2, 0); // 3.14; 3.14; 0.5; 0.5 (unmodified) 507 534 508 assert( & lf`first == & f1);509 assert( & lf`last == & f2);535 assert( & lf`first == & f1 ); 536 assert( & lf`last == & f2 ); 510 537 } 511 538 … … 515 542 fred f2 = {0.5}; 516 543 517 dlist(fred _in_yours, fred) lf;518 519 assert( & lf`first == 0p);520 assert( & lf`last == 0p);544 dlist(fred, fred.yours) lf; 545 546 assert( & lf`first == 0p ); 547 assert( & lf`last == 0p ); 521 548 522 549 insert_last(lf, f2); 523 550 524 assert( & lf`first == & f2);525 assert( & lf`last == & f2);551 assert( & lf`first == & f2 ); 552 assert( & lf`last == & f2 ); 526 553 527 554 verify(validate(lf)); 528 555 529 insert_before(f2`in_yours, f1);556 with ( DLINK_VIA(fred, fred.yours) )insert_before(f2, f1); 530 557 531 558 verify(validate(lf)); … … 534 561 printYourFreddies(f1, f2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) 535 562 536 assert( & lf`first == & f1);537 assert( & lf`last == & f2);563 assert( & lf`first == & f1 ); 564 assert( & lf`last == & f2 ); 538 565 } 539 566 … … 543 570 mary m2 = {0.5}; 544 571 545 dlist(mary , mary) lm;546 547 assert( & lm`first == 0p);548 assert( & lm`last == 0p);572 dlist(mary) lm; 573 574 assert( & lm`first == 0p ); 575 assert( & lm`last == 0p ); 549 576 550 577 insert_last(lm, m2); 551 578 552 assert( & lm`first == & m2);553 assert( & lm`last == & m2);579 assert( & lm`first == & m2 ); 580 assert( & lm`last == & m2 ); 554 581 555 582 verify(validate(lm)); … … 561 588 printMariatheotokos(m1, m2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) 562 589 563 assert(& lm`first == & m1); 564 assert(& lm`last == & m2); 565 } 590 assert( & lm`first == & m1 ); 591 assert( & lm`last == & m2 ); 592 } 593 #if 0 566 594 567 595 //////////////////////////////////////////////////////////// … … 846 874 // 847 875 //////////////////////////////////////////////////////////// 848 876 #endif 849 877 void test__remove_at_head__fred_mine() { 850 878 … … 853 881 fred f3 = {3.7}; 854 882 855 dlist(fred _in_mine, fred) flm;883 dlist(fred, fred.mine) flm; 856 884 insert_last(flm, f1); 857 885 insert_last(flm, f2); 858 886 insert_last(flm, f3); 859 887 860 dlist(fred _in_yours, fred) fly;888 dlist(fred, fred.yours) fly; 861 889 insert_last(fly, f1); 862 890 insert_last(fly, f2); … … 869 897 verify(validate(flm)); 870 898 871 remove(f1`in_mine);899 with( DLINK_VIA(fred, fred.mine) ) remove(f1); 872 900 873 901 verify(validate(fly)); … … 881 909 882 910 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 883 assert(f1.$links_mine.next.is_terminator == false); 884 assert(f1.$links_mine.prev.is_terminator == false); 885 } 911 // assert(f1.$links_mine.next.is_terminator == false); 912 // assert(f1.$links_mine.prev.is_terminator == false); 913 } 914 886 915 887 916 void test__remove_at_head__fred_yours() { … … 891 920 fred f3 = {3.7}; 892 921 893 dlist(fred _in_mine, fred) flm;922 dlist(fred, fred.mine) flm; 894 923 insert_last(flm, f1); 895 924 insert_last(flm, f2); 896 925 insert_last(flm, f3); 897 926 898 dlist(fred _in_yours, fred) fly;927 dlist(fred, fred.yours) fly; 899 928 insert_last(fly, f1); 900 929 insert_last(fly, f2); … … 907 936 verify(validate(flm)); 908 937 909 remove(f1`in_yours);938 with( DLINK_VIA(fred, fred.yours) ) remove(f1); 910 939 911 940 verify(validate(fly)); … … 919 948 920 949 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 921 assert(f1.$links_yours.next.is_terminator == false);922 assert(f1.$links_yours.prev.is_terminator == false);950 // assert(f1.$links_yours.next.is_terminator == false); 951 // assert(f1.$links_yours.prev.is_terminator == false); 923 952 } 924 953 … … 929 958 mary m3 = {3.7}; 930 959 931 dlist(mary , mary) ml;960 dlist(mary) ml; 932 961 insert_last(ml, m1); 933 962 insert_last(ml, m2); … … 948 977 949 978 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 950 assert(m1.$links.next.is_terminator == false);951 assert(m1.$links.prev.is_terminator == false);979 // assert(m1.$links.next.is_terminator == false); 980 // assert(m1.$links.prev.is_terminator == false); 952 981 } 953 982 … … 968 997 fred f3 = {3.7}; 969 998 970 dlist(fred _in_mine, fred) flm;999 dlist(fred, fred.mine) flm; 971 1000 insert_last(flm, f1); 972 1001 insert_last(flm, f2); 973 1002 insert_last(flm, f3); 974 1003 975 dlist(fred _in_yours, fred) fly;1004 dlist(fred, fred.yours) fly; 976 1005 insert_last(fly, f1); 977 1006 insert_last(fly, f2); … … 984 1013 verify(validate(flm)); 985 1014 986 remove(f3`in_mine);1015 with( DLINK_VIA(fred, fred.mine) ) remove(f3); 987 1016 988 1017 verify(validate(fly)); … … 996 1025 997 1026 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 998 assert(f3.$links_mine.next.is_terminator == false);999 assert(f3.$links_mine.prev.is_terminator == false);1027 // assert(f3.$links_mine.next.is_terminator == false); 1028 // assert(f3.$links_mine.prev.is_terminator == false); 1000 1029 } 1001 1030 … … 1006 1035 fred f3 = {3.7}; 1007 1036 1008 dlist(fred _in_mine, fred) flm;1037 dlist(fred, fred.mine) flm; 1009 1038 insert_last(flm, f1); 1010 1039 insert_last(flm, f2); 1011 1040 insert_last(flm, f3); 1012 1041 1013 dlist(fred _in_yours, fred) fly;1042 dlist(fred, fred.yours) fly; 1014 1043 insert_last(fly, f1); 1015 1044 insert_last(fly, f2); … … 1022 1051 verify(validate(flm)); 1023 1052 1024 remove(f3`in_yours);1053 with( DLINK_VIA(fred, fred.yours) ) remove(f3); 1025 1054 1026 1055 verify(validate(fly)); … … 1034 1063 1035 1064 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 1036 assert(f3.$links_yours.next.is_terminator == false);1037 assert(f3.$links_yours.prev.is_terminator == false);1065 // assert(f3.$links_yours.next.is_terminator == false); 1066 // assert(f3.$links_yours.prev.is_terminator == false); 1038 1067 } 1039 1068 … … 1044 1073 mary m3 = {3.7}; 1045 1074 1046 dlist(mary , mary) ml;1075 dlist(mary) ml; 1047 1076 insert_last(ml, m1); 1048 1077 insert_last(ml, m2); … … 1063 1092 1064 1093 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 1065 assert(m3.$links.next.is_terminator == false);1066 assert(m3.$links.prev.is_terminator == false);1094 // assert(m3.$links.next.is_terminator == false); 1095 // assert(m3.$links.prev.is_terminator == false); 1067 1096 } 1068 1097 … … 1081 1110 fred f = {0.7}; 1082 1111 1083 dlist(fred _in_mine, fred) flm;1112 dlist(fred, fred.mine) flm; 1084 1113 insert_last(flm, f); 1085 1114 1086 dlist(fred _in_yours, fred) fly;1115 dlist(fred, fred.yours) fly; 1087 1116 insert_last(fly, f); 1088 1117 … … 1093 1122 verify(validate(flm)); 1094 1123 1095 remove(f`in_mine);1096 1097 verify(validate(fly)); 1098 verify(validate(flm)); 1099 1100 assert( & flm`first == 0p);1101 assert( & flm`last == 0p);1124 with( DLINK_VIA(fred, fred.mine) ) remove(f); 1125 1126 verify(validate(fly)); 1127 verify(validate(flm)); 1128 1129 assert( & flm`first == 0p ); 1130 assert( & flm`last == 0p ); 1102 1131 1103 1132 printYourFreddies(fly`first, fly`last, 0); // 0.7; 0.7; 0.7; 0.7 (unmodified) … … 1107 1136 1108 1137 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 1109 assert(f.$links_mine.next.is_terminator == false);1110 assert(f.$links_mine.prev.is_terminator == false);1138 // assert(f.$links_mine.next.is_terminator == false); 1139 // assert(f.$links_mine.prev.is_terminator == false); 1111 1140 1112 1141 insert_last(flm, f); … … 1120 1149 fred f = {0.7}; 1121 1150 1122 dlist(fred _in_mine, fred) flm;1151 dlist(fred, fred.mine) flm; 1123 1152 insert_last(flm, f); 1124 1153 1125 dlist(fred _in_yours, fred) fly;1154 dlist(fred, fred.yours) fly; 1126 1155 insert_last(fly, f); 1127 1156 … … 1132 1161 verify(validate(flm)); 1133 1162 1134 remove(f`in_yours);1135 1136 verify(validate(fly)); 1137 verify(validate(flm)); 1138 1139 assert( & fly`first == 0p);1140 assert( & fly`last == 0p);1163 with( DLINK_VIA(fred, fred.yours) ) remove(f); 1164 1165 verify(validate(fly)); 1166 verify(validate(flm)); 1167 1168 assert( & fly`first == 0p ); 1169 assert( & fly`last == 0p ); 1141 1170 1142 1171 printYourFreddies(flm`first, flm`last, 0); // 0.7; 0.7; 0.7; 0.7 (unmodified) … … 1146 1175 1147 1176 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 1148 assert(f.$links_yours.next.is_terminator == false);1149 assert(f.$links_yours.prev.is_terminator == false);1177 // assert(f.$links_yours.next.is_terminator == false); 1178 // assert(f.$links_yours.prev.is_terminator == false); 1150 1179 1151 1180 insert_last(fly, f); … … 1159 1188 mary m = {0.7}; 1160 1189 1161 dlist(mary , mary) ml;1190 dlist(mary) ml; 1162 1191 insert_last(ml, m); 1163 1192 … … 1170 1199 verify(validate(ml)); 1171 1200 1172 assert( & ml`first == 0p);1173 assert( & ml`last == 0p);1201 assert( & ml`first == 0p ); 1202 assert( & ml`last == 0p ); 1174 1203 1175 1204 // observe f is solo in mine (now unlisted); in yours, it was just traversed … … 1177 1206 1178 1207 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 1179 assert(m.$links.next.is_terminator == false);1180 assert(m.$links.prev.is_terminator == false);1208 // assert(m.$links.next.is_terminator == false); 1209 // assert(m.$links.prev.is_terminator == false); 1181 1210 1182 1211 insert_last(ml, m); … … 1203 1232 fred f3 = {3.7}; 1204 1233 1205 dlist(fred _in_mine, fred) flm;1234 dlist(fred, fred.mine) flm; 1206 1235 insert_last(flm, f1); 1207 1236 insert_last(flm, f2); 1208 1237 insert_last(flm, f3); 1209 1238 1210 dlist(fred _in_yours, fred) fly;1239 dlist(fred, fred.yours) fly; 1211 1240 insert_last(fly, f1); 1212 1241 insert_last(fly, f2); … … 1219 1248 verify(validate(flm)); 1220 1249 1221 fred & popped = pop_first(flm);1250 fred & popped = try_pop_front(flm); 1222 1251 1223 1252 verify(validate(fly)); … … 1239 1268 fred f3 = {3.7}; 1240 1269 1241 dlist(fred _in_mine, fred) flm;1270 dlist(fred, fred.mine) flm; 1242 1271 insert_last(flm, f1); 1243 1272 insert_last(flm, f2); 1244 1273 insert_last(flm, f3); 1245 1274 1246 dlist(fred _in_yours, fred) fly;1275 dlist(fred, fred.yours) fly; 1247 1276 insert_last(fly, f1); 1248 1277 insert_last(fly, f2); … … 1255 1284 verify(validate(flm)); 1256 1285 1257 fred & popped = pop_first(fly);1286 fred & popped = try_pop_front(fly); 1258 1287 1259 1288 verify(validate(fly)); … … 1275 1304 mary m3 = {3.7}; 1276 1305 1277 dlist(mary , mary) ml;1306 dlist(mary) ml; 1278 1307 insert_last(ml, m1); 1279 1308 insert_last(ml, m2); … … 1284 1313 verify(validate(ml)); 1285 1314 1286 mary & popped = pop_first(ml);1315 mary & popped = try_pop_front(ml); 1287 1316 1288 1317 verify(validate(ml)); … … 1302 1331 fred f3 = {3.7}; 1303 1332 1304 dlist(fred _in_mine, fred) flm;1333 dlist(fred, fred.mine) flm; 1305 1334 insert_last(flm, f1); 1306 1335 insert_last(flm, f2); 1307 1336 insert_last(flm, f3); 1308 1337 1309 dlist(fred _in_yours, fred) fly;1338 dlist(fred, fred.yours) fly; 1310 1339 insert_last(fly, f1); 1311 1340 insert_last(fly, f2); … … 1318 1347 verify(validate(flm)); 1319 1348 1320 fred & popped = pop_last(flm);1349 fred & popped = try_pop_back(flm); 1321 1350 1322 1351 verify(validate(fly)); … … 1338 1367 fred f3 = {3.7}; 1339 1368 1340 dlist(fred _in_mine, fred) flm;1369 dlist(fred, fred.mine) flm; 1341 1370 insert_last(flm, f1); 1342 1371 insert_last(flm, f2); 1343 1372 insert_last(flm, f3); 1344 1373 1345 dlist(fred _in_yours, fred) fly;1374 dlist(fred, fred.yours) fly; 1346 1375 insert_last(fly, f1); 1347 1376 insert_last(fly, f2); … … 1354 1383 verify(validate(flm)); 1355 1384 1356 fred & popped = pop_last(fly);1385 fred & popped = try_pop_back(fly); 1357 1386 1358 1387 verify(validate(fly)); … … 1374 1403 mary m3 = {3.7}; 1375 1404 1376 dlist(mary , mary) ml;1405 dlist(mary) ml; 1377 1406 insert_last(ml, m1); 1378 1407 insert_last(ml, m2); … … 1383 1412 verify(validate(ml)); 1384 1413 1385 mary & popped = pop_last(ml);1414 mary & popped = try_pop_back(ml); 1386 1415 1387 1416 verify(validate(ml)); … … 1397 1426 //////////////////////////////////////////////////////////// 1398 1427 // 1428 // Section 4g 1429 // 1430 // Test cases of `isEmpty, `hasPrev, `hasNext, 1431 // try_pop_front, try_pop_back, modifications via `elems 1432 // 1433 // Example of call-side user code 1434 // 1435 //////////////////////////////////////////////////////////// 1436 1437 void test__accessor_cases__mary() { 1438 1439 mary m1 = {1.7}; 1440 mary m2 = {2.7}; 1441 mary m3 = {3.7}; 1442 1443 dlist(mary) ml; assert( ml`isEmpty); 1444 1445 insert_last(ml, m1); assert(!ml`isEmpty); 1446 insert_last(ml, m2); assert(!ml`isEmpty); 1447 insert_last(ml, m3); assert(!ml`isEmpty); 1448 1449 mary & m1prev = m1`prev; 1450 mary & m1next = m1`next; 1451 mary & m2prev = m2`prev; 1452 mary & m2next = m2`next; 1453 mary & m3prev = m3`prev; 1454 mary & m3next = m3`next; 1455 1456 assert (&m1prev == 0p); 1457 assert (&m1next == &m2); 1458 assert (&m2prev == &m1); 1459 assert (&m2next == &m3); 1460 assert (&m3prev == &m2); 1461 assert (&m3next == 0p); 1462 1463 assert(!m1`hasPrev); 1464 assert( m1`hasNext); 1465 assert( m2`hasPrev); 1466 assert( m2`hasNext); 1467 assert( m3`hasPrev); 1468 assert(!m3`hasNext); 1469 1470 printf("accessor_cases done\n"); 1471 } 1472 1473 void test__try_pop__mary() { 1474 1475 mary m1 = {1.7}; 1476 mary m2 = {2.7}; 1477 mary m3 = {3.7}; 1478 1479 dlist(mary) ml; 1480 1481 mary &m1r = *0p; 1482 mary &m2r = *0p; 1483 mary &m3r = *0p; 1484 mary &mxr = *0p; 1485 1486 // queue, back to front 1487 1488 assert( ml`isEmpty); 1489 1490 insert_last(ml, m1); 1491 insert_last(ml, m2); 1492 insert_last(ml, m3); 1493 1494 &m1r = & try_pop_front(ml); assert(!ml`isEmpty); 1495 &m2r = & try_pop_front(ml); assert(!ml`isEmpty); 1496 &m3r = & try_pop_front(ml); assert( ml`isEmpty); 1497 &mxr = & try_pop_front(ml); assert( ml`isEmpty); 1498 1499 assert( &m1r == &m1 ); 1500 assert( &m2r == &m2 ); 1501 assert( &m3r == &m3 ); 1502 assert( &mxr == 0p ); 1503 1504 &m1r = 0p; 1505 &m2r = 0p; 1506 &m3r = 0p; 1507 1508 // queue, front to back 1509 1510 assert( ml`isEmpty); 1511 1512 insert_first(ml, m1); 1513 insert_first(ml, m2); 1514 insert_first(ml, m3); 1515 1516 &m1r = & try_pop_back(ml); assert(!ml`isEmpty); 1517 &m2r = & try_pop_back(ml); assert(!ml`isEmpty); 1518 &m3r = & try_pop_back(ml); assert( ml`isEmpty); 1519 &mxr = & try_pop_back(ml); assert( ml`isEmpty); 1520 1521 assert( &m1r == &m1 ); 1522 assert( &m2r == &m2 ); 1523 assert( &m3r == &m3 ); 1524 assert( &mxr == 0p ); 1525 1526 &m1r = 0p; 1527 &m2r = 0p; 1528 &m3r = 0p; 1529 1530 // stack at front 1531 1532 assert( ml`isEmpty); 1533 1534 insert_first(ml, m1); 1535 insert_first(ml, m2); 1536 insert_first(ml, m3); 1537 1538 &m3r = & try_pop_front(ml); assert(!ml`isEmpty); 1539 &m2r = & try_pop_front(ml); assert(!ml`isEmpty); 1540 &m1r = & try_pop_front(ml); assert( ml`isEmpty); 1541 &mxr = & try_pop_front(ml); assert( ml`isEmpty); 1542 1543 assert( &m1r == &m1 ); 1544 assert( &m2r == &m2 ); 1545 assert( &m3r == &m3 ); 1546 assert( &mxr == 0p ); 1547 1548 &m1r = 0p; 1549 &m2r = 0p; 1550 &m3r = 0p; 1551 1552 // stack at back 1553 1554 assert( ml`isEmpty); 1555 1556 insert_last(ml, m1); 1557 insert_last(ml, m2); 1558 insert_last(ml, m3); 1559 1560 &m3r = & try_pop_back(ml); assert(!ml`isEmpty); 1561 &m2r = & try_pop_back(ml); assert(!ml`isEmpty); 1562 &m1r = & try_pop_back(ml); assert( ml`isEmpty); 1563 &mxr = & try_pop_back(ml); assert( ml`isEmpty); 1564 1565 assert( &m1r == &m1 ); 1566 assert( &m2r == &m2 ); 1567 assert( &m3r == &m3 ); 1568 assert( &mxr == 0p ); 1569 1570 &m1r = 0p; 1571 &m2r = 0p; 1572 &m3r = 0p; 1573 1574 printf("try_pop cases done\n"); 1575 } 1576 1577 void test__origin_mutation__mary() { 1578 1579 mary m1 = {1.7}; 1580 1581 dlist(mary) ml; 1582 mary & mlorigin = ml`elems; 1583 1584 // insert before the origin 1585 1586 insert_before( ml`elems, m1 ); 1587 assert( ! ml`isEmpty ); 1588 1589 mary & mlfirst = ml`first; 1590 mary & mllast = ml`last; 1591 1592 assert( &m1 == & mlfirst ); 1593 assert( &m1 == & mllast ); 1594 1595 // moveNext after last goes back to origin, &vv 1596 1597 bool canMoveNext = mllast`moveNext; 1598 bool canMovePrev = mlfirst`movePrev; 1599 1600 assert( ! canMoveNext ); 1601 assert( ! canMovePrev ); 1602 1603 assert( &mlorigin == & mlfirst ); 1604 assert( &mlorigin == & mllast ); 1605 1606 printf("origin_mutation cases done\n"); 1607 } 1608 1609 //////////////////////////////////////////////////////////// 1610 // 1399 1611 // Section 5 1400 1612 // … … 1404 1616 1405 1617 int main() { 1406 1618 #if 0 1407 1619 sout | "~~~~~~~~~~~~~~~~~ Headless List Tests - insert_after ~~~~~~~~~~~~~~~~"; 1408 1620 sout | ""; … … 1441 1653 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1442 1654 test__insertbefore_singleton_on_singleton__mary(); 1443 1655 #endif 1444 1656 sout | ""; 1445 1657 sout | "~~~~~~~~~~~~~~~~~ Headed List Tests - insert_first ~~~~~~~~~~~~~~~~~~"; … … 1517 1729 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1518 1730 test__insertbefore_before_first__mary(); 1731 #if 0 1519 1732 1520 1733 sout | ""; … … 1574 1787 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1575 1788 test__remove_at_last__mary(); 1576 1789 #endif 1577 1790 sout | ""; 1578 1791 sout | "~~~~~~~~~~ Element removal tests on Headed List: at first ~~~~~~~~~~"; … … 1670 1883 test__pop_last__maries(); 1671 1884 1885 sout | ""; 1886 sout | "~~~~~~~~~~~~~~~~~~~ Ease-of-access cases ~~~~~~~~~~~~~~~~~~"; 1887 sout | ""; 1888 1889 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1890 sout | "Test 18-i. Modifying Freds on MINE"; 1891 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1892 sout | "Not implmented"; 1893 1894 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1895 sout | "Test 18-ii. Modifying Freds on YOURS"; 1896 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1897 sout | "Not implmented"; 1898 1899 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1900 sout | "Test 18-iii. Modifying Maries"; 1901 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1902 1903 test__accessor_cases__mary(); 1904 test__try_pop__mary(); 1905 test__origin_mutation__mary(); 1906 1672 1907 return 0; 1673 1908 }
Note: See TracChangeset
for help on using the changeset viewer.