- File:
-
- 1 edited
-
tests/list/dlist-insert-remove.cfa (modified) (76 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tests/list/dlist-insert-remove.cfa
rc2794b2 rf2d05e9 19 19 struct fred { 20 20 float adatum; 21 inline struct mine { inline dlink(fred); };22 inline struct yours { inline dlink(fred); };21 DLISTED_MGD_EXPL_IN(fred, mine) 22 DLISTED_MGD_EXPL_IN(fred, yours) 23 23 }; 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 24 25 DLISTED_MGD_EXPL_OUT(fred, mine) 26 DLISTED_MGD_EXPL_OUT(fred, yours) 29 27 30 28 void ?{}(fred &this, float adatum) { … … 35 33 struct mary { 36 34 float anotherdatum; 37 inline dlink(mary);35 DLISTED_MGD_IMPL_IN(mary) 38 36 }; 39 37 40 P9_EMBEDDED(mary, dlink(mary))38 DLISTED_MGD_IMPL_OUT(mary) 41 39 42 40 void ?{}(mary &this, float anotherdatum) { … … 55 53 //////////////////////////////////////////////////////////// 56 54 57 void printMyFredsFwd(fred & f) { 58 with( DLINK_VIA( fred, fred.mine ) ) 59 do { 55 void printMyFredsFwd(fred &f) { 56 while (&f != 0p) { 60 57 sout | f.adatum; 61 } while (f`moveNext);62 }63 64 void printMyFredsRev(fred & f) { 65 with( DLINK_VIA( fred, fred.mine ) ) 66 do{58 &f = &f`in_mine`next; 59 } 60 } 61 62 void printMyFredsRev(fred &f) { 63 while (&f != 0p) { 67 64 sout | f.adatum; 68 } while (f`movePrev);69 }70 65 &f = &f`in_mine`prev; 66 } 67 } 71 68 72 69 void printMyFreddies(fred &f1, fred &f2, int isBefore) { … … 76 73 sout | "==== fred by MINE after "; 77 74 } 78 if (&f1) { 79 printMyFredsFwd(f1); sout | '-'; 80 printMyFredsRev(f1); sout | '-'; 81 } else { 82 sout | '-'; sout | '-'; 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) { 83 sout | f.adatum; 84 &f = &f`in_yours`next; 83 85 } 84 if (&f2) { 85 printMyFredsFwd(f2); sout | '-'; 86 printMyFredsRev(f2); sout | '-'; 87 } else { 88 sout | '-'; sout | '-'; 86 } 87 88 void printYourFredsRev(fred &f) { 89 while (&f != 0p) { 90 sout | f.adatum; 91 &f = &f`in_yours`prev; 89 92 } 90 }91 92 void printYourFredsFwd(fred & f) {93 with( DLINK_VIA( fred, fred.yours ) )94 do {95 sout | f.adatum;96 } while (f`moveNext);97 }98 99 void printYourFredsRev(fred & f) {100 with( DLINK_VIA( fred, fred.yours ) )101 do {102 sout | f.adatum;103 } while (f`movePrev);104 93 } 105 94 … … 110 99 sout | "==== fred by YOURS after "; 111 100 } 112 if (&f1) { 113 printYourFredsFwd(f1); sout | '-'; 114 printYourFredsRev(f1); sout | '-'; 115 } else { 116 sout | '-'; sout | '-'; 101 printYourFredsFwd(f1); sout | '-'; 102 printYourFredsRev(f1); sout | '-'; 103 printYourFredsFwd(f2); sout | '-'; 104 printYourFredsRev(f2); sout | '-'; 105 } 106 107 void printMariesFwd(mary &m) { 108 while (&m != 0p) { 109 sout | m.anotherdatum; 110 &m = &m`next; 117 111 } 118 if (&f2) { 119 printYourFredsFwd(f2); sout | '-'; 120 printYourFredsRev(f2); sout | '-'; 121 } else { 122 sout | '-'; sout | '-'; 112 } 113 114 void printMariesRev(mary &m) { 115 while (&m != 0p) { 116 sout | m.anotherdatum; 117 &m = &m`prev; 123 118 } 124 }125 126 void printMariesFwd(mary &m) {127 do {128 sout | m.anotherdatum;129 } while (m`moveNext);130 }131 132 void printMariesRev(mary &m) {133 do {134 sout | m.anotherdatum;135 } while (m`movePrev);136 119 } 137 120 … … 142 125 sout | "==== mary after "; 143 126 } 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 } 127 printMariesFwd(m1); sout | '-'; 128 printMariesRev(m1); sout | '-'; 129 printMariesFwd(m2); sout | '-'; 130 printMariesRev(m2); sout | '-'; 156 131 } 157 132 … … 178 153 // - from list position #2 moving backward (d) 179 154 // The expected-output comments are in form a;b;c;d where a::=num,num,num 180 #if 0 155 181 156 void test__insertafter_singleton_on_singleton__fred_mine () { 182 157 fred f1 = {3.14}; … … 186 161 printYourFreddies(f1, f2, 1); // 3.14; 3.14; 0.5; 0.5 187 162 188 diref(fred, fred.mine) f1_mine = f1`from; 189 insert_after(f1_mine, f2); 163 insert_after(f1`in_mine, f2); 190 164 191 165 printMyFreddies(f1, f2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) … … 200 174 printYourFreddies(f1, f2, 1); // 3.14; 3.14; 0.5; 0.5 201 175 202 diref(fred, fred.yours) f1_yours = f1`from; 203 insert_after(f1_yours, f2); 176 insert_after(f1`in_yours, f2); 204 177 205 178 printMyFreddies(f1, f2, 0); // 3.14; 3.14; 0.5; 0.5 (unmodified) … … 235 208 printYourFreddies(f1, f2, 1); // 3.14; 3.14; 0.5; 0.5 236 209 237 diref(fred, fred.mine) f2_mine = f2`from; 238 insert_before(f2_mine, f1); 210 insert_before(f2`in_mine, f1); 239 211 240 212 printMyFreddies(f1, f2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) … … 249 221 printYourFreddies(f1, f2, 1); // 3.14; 3.14; 0.5; 0.5 250 222 251 diref(fred, fred.yours) f2_yours = f2`from; 252 insert_before(f2_yours, f1); 223 insert_before(f2`in_yours, f1); 253 224 254 225 printMyFreddies(f1, f2, 0); // 3.14; 3.14; 0.5; 0.5 (unmodified) … … 266 237 printMariatheotokos(m1, m2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) 267 238 } 268 #endif 239 269 240 //////////////////////////////////////////////////////////// 270 241 // … … 279 250 // All three tests exercise the case of creating an empty container and 280 251 // adding two items to it. 252 281 253 void test__insertfirst_two_on_empty__fred_mine() { 282 254 … … 284 256 fred f2 = {0.5}; 285 257 286 dlist(fred , fred.mine) lf;258 dlist(fred_in_mine, fred) lf; 287 259 288 260 verify(validate(lf)); … … 305 277 fred f2 = {0.5}; 306 278 307 dlist(fred , fred.yours) lf;279 dlist(fred_in_yours, fred) lf; 308 280 309 281 verify(validate(lf)); … … 320 292 printYourFreddies(f1, f2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) 321 293 } 294 322 295 void test__insertfirst_two_on_empty__mary() { 323 296 … … 325 298 mary m2 = {0.5}; 326 299 327 dlist(mary ) lm;300 dlist(mary, mary) lm; 328 301 329 302 verify(validate(lm)); … … 352 325 fred f2 = {0.5}; 353 326 354 dlist(fred , fred.mine) lf;327 dlist(fred_in_mine, fred) lf; 355 328 356 329 verify(validate(lf)); … … 373 346 fred f2 = {0.5}; 374 347 375 dlist(fred , fred.yours) lf;348 dlist(fred_in_yours, fred) lf; 376 349 377 350 verify(validate(lf)); … … 394 367 mary m2 = {0.5}; 395 368 396 dlist(mary ) lm;369 dlist(mary, mary) lm; 397 370 398 371 verify(validate(lm)); … … 421 394 fred f2 = {0.5}; 422 395 423 dlist(fred , fred.mine) lf;424 425 assert( & lf`first == 0p);426 assert( & lf`last == 0p);396 dlist(fred_in_mine, fred) lf; 397 398 assert(& lf`first == 0p); 399 assert(& lf`last == 0p); 427 400 428 401 insert_first(lf, f1); 429 402 430 assert( & lf`first == & f1);431 assert( & lf`last == & f1);403 assert(& lf`first == & f1); 404 assert(& lf`last == & f1); 432 405 433 406 verify(validate(lf)); 434 407 435 with ( DLINK_VIA(fred, fred.mine) ) insert_after(f1, f2);408 insert_after(f1`in_mine, f2); 436 409 437 410 verify(validate(lf)); … … 440 413 printYourFreddies(f1, f2, 0); // 3.14; 3.14; 0.5; 0.5 (unmodified) 441 414 442 assert( & lf`first == & f1);443 assert( & lf`last == & f2);415 assert(& lf`first == & f1); 416 assert(& lf`last == & f2); 444 417 } 445 418 … … 449 422 fred f2 = {0.5}; 450 423 451 dlist(fred , fred.yours) lf;452 453 assert( & lf`first == 0p);454 assert( & lf`last == 0p);424 dlist(fred_in_yours, fred) lf; 425 426 assert(& lf`first == 0p); 427 assert(& lf`last == 0p); 455 428 456 429 insert_first(lf, f1); 457 430 458 assert( & lf`first == & f1);459 assert( & lf`last == & f1);431 assert(& lf`first == & f1); 432 assert(& lf`last == & f1); 460 433 461 434 verify(validate(lf)); 462 435 463 with ( DLINK_VIA(fred, fred.yours) ) insert_after(f1, f2);436 insert_after(f1`in_yours, f2); 464 437 465 438 verify(validate(lf)); … … 468 441 printYourFreddies(f1, f2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) 469 442 470 assert( & lf`first == & f1);471 assert( & lf`last == & f2);443 assert(& lf`first == & f1); 444 assert(& lf`last == & f2); 472 445 } 473 446 … … 477 450 mary m2 = {0.5}; 478 451 479 dlist(mary ) lm;480 481 assert( & lm`first == 0p);482 assert( & lm`last == 0p);452 dlist(mary, mary) lm; 453 454 assert(& lm`first == 0p); 455 assert(& lm`last == 0p); 483 456 484 457 insert_first(lm, m1); 485 458 486 assert( & lm`first == & m1);487 assert( & lm`last == & m1);459 assert(& lm`first == & m1); 460 assert(& lm`last == & m1); 488 461 489 462 verify(validate(lm)); … … 495 468 printMariatheotokos(m1, m2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) 496 469 497 assert( & lm`first == & m1);498 assert( & lm`last == & m2);470 assert(& lm`first == & m1); 471 assert(& lm`last == & m2); 499 472 } 500 473 … … 514 487 fred f2 = {0.5}; 515 488 516 dlist(fred , fred.mine) lf;517 518 assert( & lf`first == 0p);519 assert( & lf`last == 0p);489 dlist(fred_in_mine, fred) lf; 490 491 assert(& lf`first == 0p); 492 assert(& lf`last == 0p); 520 493 521 494 insert_last(lf, f2); 522 495 523 assert( & lf`first == & f2);524 assert( & lf`last == & f2);496 assert(& lf`first == & f2); 497 assert(& lf`last == & f2); 525 498 526 499 verify(validate(lf)); 527 500 528 with ( DLINK_VIA(fred, fred.mine) ) insert_before(f2, f1);501 insert_before(f2`in_mine, f1); 529 502 530 503 verify(validate(lf)); … … 533 506 printYourFreddies(f1, f2, 0); // 3.14; 3.14; 0.5; 0.5 (unmodified) 534 507 535 assert( & lf`first == & f1);536 assert( & lf`last == & f2);508 assert(& lf`first == & f1); 509 assert(& lf`last == & f2); 537 510 } 538 511 … … 542 515 fred f2 = {0.5}; 543 516 544 dlist(fred , fred.yours) lf;545 546 assert( & lf`first == 0p);547 assert( & lf`last == 0p);517 dlist(fred_in_yours, fred) lf; 518 519 assert(& lf`first == 0p); 520 assert(& lf`last == 0p); 548 521 549 522 insert_last(lf, f2); 550 523 551 assert( & lf`first == & f2);552 assert( & lf`last == & f2);524 assert(& lf`first == & f2); 525 assert(& lf`last == & f2); 553 526 554 527 verify(validate(lf)); 555 528 556 with ( DLINK_VIA(fred, fred.yours) )insert_before(f2, f1);529 insert_before(f2`in_yours, f1); 557 530 558 531 verify(validate(lf)); … … 561 534 printYourFreddies(f1, f2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) 562 535 563 assert( & lf`first == & f1);564 assert( & lf`last == & f2);536 assert(& lf`first == & f1); 537 assert(& lf`last == & f2); 565 538 } 566 539 … … 570 543 mary m2 = {0.5}; 571 544 572 dlist(mary ) lm;573 574 assert( & lm`first == 0p);575 assert( & lm`last == 0p);545 dlist(mary, mary) lm; 546 547 assert(& lm`first == 0p); 548 assert(& lm`last == 0p); 576 549 577 550 insert_last(lm, m2); 578 551 579 assert( & lm`first == & m2);580 assert( & lm`last == & m2);552 assert(& lm`first == & m2); 553 assert(& lm`last == & m2); 581 554 582 555 verify(validate(lm)); … … 588 561 printMariatheotokos(m1, m2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified) 589 562 590 assert( & lm`first == & m1 ); 591 assert( & lm`last == & m2 ); 592 } 593 #if 0 563 assert(& lm`first == & m1); 564 assert(& lm`last == & m2); 565 } 594 566 595 567 //////////////////////////////////////////////////////////// … … 874 846 // 875 847 //////////////////////////////////////////////////////////// 876 #endif 848 877 849 void test__remove_at_head__fred_mine() { 878 850 … … 881 853 fred f3 = {3.7}; 882 854 883 dlist(fred , fred.mine) flm;855 dlist(fred_in_mine, fred) flm; 884 856 insert_last(flm, f1); 885 857 insert_last(flm, f2); 886 858 insert_last(flm, f3); 887 859 888 dlist(fred , fred.yours) fly;860 dlist(fred_in_yours, fred) fly; 889 861 insert_last(fly, f1); 890 862 insert_last(fly, f2); … … 897 869 verify(validate(flm)); 898 870 899 with( DLINK_VIA(fred, fred.mine) ) remove(f1);871 remove(f1`in_mine); 900 872 901 873 verify(validate(fly)); … … 909 881 910 882 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 911 // assert(f1.$links_mine.next.is_terminator == false); 912 // assert(f1.$links_mine.prev.is_terminator == false); 913 } 914 883 assert(f1.$links_mine.next.is_terminator == false); 884 assert(f1.$links_mine.prev.is_terminator == false); 885 } 915 886 916 887 void test__remove_at_head__fred_yours() { … … 920 891 fred f3 = {3.7}; 921 892 922 dlist(fred , fred.mine) flm;893 dlist(fred_in_mine, fred) flm; 923 894 insert_last(flm, f1); 924 895 insert_last(flm, f2); 925 896 insert_last(flm, f3); 926 897 927 dlist(fred , fred.yours) fly;898 dlist(fred_in_yours, fred) fly; 928 899 insert_last(fly, f1); 929 900 insert_last(fly, f2); … … 936 907 verify(validate(flm)); 937 908 938 with( DLINK_VIA(fred, fred.yours) ) remove(f1);909 remove(f1`in_yours); 939 910 940 911 verify(validate(fly)); … … 948 919 949 920 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 950 //assert(f1.$links_yours.next.is_terminator == false);951 //assert(f1.$links_yours.prev.is_terminator == false);921 assert(f1.$links_yours.next.is_terminator == false); 922 assert(f1.$links_yours.prev.is_terminator == false); 952 923 } 953 924 … … 958 929 mary m3 = {3.7}; 959 930 960 dlist(mary ) ml;931 dlist(mary, mary) ml; 961 932 insert_last(ml, m1); 962 933 insert_last(ml, m2); … … 977 948 978 949 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 979 //assert(m1.$links.next.is_terminator == false);980 //assert(m1.$links.prev.is_terminator == false);950 assert(m1.$links.next.is_terminator == false); 951 assert(m1.$links.prev.is_terminator == false); 981 952 } 982 953 … … 997 968 fred f3 = {3.7}; 998 969 999 dlist(fred , fred.mine) flm;970 dlist(fred_in_mine, fred) flm; 1000 971 insert_last(flm, f1); 1001 972 insert_last(flm, f2); 1002 973 insert_last(flm, f3); 1003 974 1004 dlist(fred , fred.yours) fly;975 dlist(fred_in_yours, fred) fly; 1005 976 insert_last(fly, f1); 1006 977 insert_last(fly, f2); … … 1013 984 verify(validate(flm)); 1014 985 1015 with( DLINK_VIA(fred, fred.mine) ) remove(f3);986 remove(f3`in_mine); 1016 987 1017 988 verify(validate(fly)); … … 1025 996 1026 997 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 1027 //assert(f3.$links_mine.next.is_terminator == false);1028 //assert(f3.$links_mine.prev.is_terminator == false);998 assert(f3.$links_mine.next.is_terminator == false); 999 assert(f3.$links_mine.prev.is_terminator == false); 1029 1000 } 1030 1001 … … 1035 1006 fred f3 = {3.7}; 1036 1007 1037 dlist(fred , fred.mine) flm;1008 dlist(fred_in_mine, fred) flm; 1038 1009 insert_last(flm, f1); 1039 1010 insert_last(flm, f2); 1040 1011 insert_last(flm, f3); 1041 1012 1042 dlist(fred , fred.yours) fly;1013 dlist(fred_in_yours, fred) fly; 1043 1014 insert_last(fly, f1); 1044 1015 insert_last(fly, f2); … … 1051 1022 verify(validate(flm)); 1052 1023 1053 with( DLINK_VIA(fred, fred.yours) ) remove(f3);1024 remove(f3`in_yours); 1054 1025 1055 1026 verify(validate(fly)); … … 1063 1034 1064 1035 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 1065 //assert(f3.$links_yours.next.is_terminator == false);1066 //assert(f3.$links_yours.prev.is_terminator == false);1036 assert(f3.$links_yours.next.is_terminator == false); 1037 assert(f3.$links_yours.prev.is_terminator == false); 1067 1038 } 1068 1039 … … 1073 1044 mary m3 = {3.7}; 1074 1045 1075 dlist(mary ) ml;1046 dlist(mary, mary) ml; 1076 1047 insert_last(ml, m1); 1077 1048 insert_last(ml, m2); … … 1092 1063 1093 1064 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 1094 //assert(m3.$links.next.is_terminator == false);1095 //assert(m3.$links.prev.is_terminator == false);1065 assert(m3.$links.next.is_terminator == false); 1066 assert(m3.$links.prev.is_terminator == false); 1096 1067 } 1097 1068 … … 1110 1081 fred f = {0.7}; 1111 1082 1112 dlist(fred , fred.mine) flm;1083 dlist(fred_in_mine, fred) flm; 1113 1084 insert_last(flm, f); 1114 1085 1115 dlist(fred , fred.yours) fly;1086 dlist(fred_in_yours, fred) fly; 1116 1087 insert_last(fly, f); 1117 1088 … … 1122 1093 verify(validate(flm)); 1123 1094 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);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); 1131 1102 1132 1103 printYourFreddies(fly`first, fly`last, 0); // 0.7; 0.7; 0.7; 0.7 (unmodified) … … 1136 1107 1137 1108 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 1138 //assert(f.$links_mine.next.is_terminator == false);1139 //assert(f.$links_mine.prev.is_terminator == false);1109 assert(f.$links_mine.next.is_terminator == false); 1110 assert(f.$links_mine.prev.is_terminator == false); 1140 1111 1141 1112 insert_last(flm, f); … … 1149 1120 fred f = {0.7}; 1150 1121 1151 dlist(fred , fred.mine) flm;1122 dlist(fred_in_mine, fred) flm; 1152 1123 insert_last(flm, f); 1153 1124 1154 dlist(fred , fred.yours) fly;1125 dlist(fred_in_yours, fred) fly; 1155 1126 insert_last(fly, f); 1156 1127 … … 1161 1132 verify(validate(flm)); 1162 1133 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);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); 1170 1141 1171 1142 printYourFreddies(flm`first, flm`last, 0); // 0.7; 0.7; 0.7; 0.7 (unmodified) … … 1175 1146 1176 1147 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 1177 //assert(f.$links_yours.next.is_terminator == false);1178 //assert(f.$links_yours.prev.is_terminator == false);1148 assert(f.$links_yours.next.is_terminator == false); 1149 assert(f.$links_yours.prev.is_terminator == false); 1179 1150 1180 1151 insert_last(fly, f); … … 1188 1159 mary m = {0.7}; 1189 1160 1190 dlist(mary ) ml;1161 dlist(mary, mary) ml; 1191 1162 insert_last(ml, m); 1192 1163 … … 1199 1170 verify(validate(ml)); 1200 1171 1201 assert( & ml`first == 0p);1202 assert( & ml`last == 0p);1172 assert(& ml`first == 0p); 1173 assert(& ml`last == 0p); 1203 1174 1204 1175 // observe f is solo in mine (now unlisted); in yours, it was just traversed … … 1206 1177 1207 1178 // TODO: decide on appropriate ovservable outcome (is_listed?) and its itended semantics 1208 //assert(m.$links.next.is_terminator == false);1209 //assert(m.$links.prev.is_terminator == false);1179 assert(m.$links.next.is_terminator == false); 1180 assert(m.$links.prev.is_terminator == false); 1210 1181 1211 1182 insert_last(ml, m); … … 1232 1203 fred f3 = {3.7}; 1233 1204 1234 dlist(fred , fred.mine) flm;1205 dlist(fred_in_mine, fred) flm; 1235 1206 insert_last(flm, f1); 1236 1207 insert_last(flm, f2); 1237 1208 insert_last(flm, f3); 1238 1209 1239 dlist(fred , fred.yours) fly;1210 dlist(fred_in_yours, fred) fly; 1240 1211 insert_last(fly, f1); 1241 1212 insert_last(fly, f2); … … 1248 1219 verify(validate(flm)); 1249 1220 1250 fred & popped = try_pop_front(flm);1221 fred & popped = pop_first(flm); 1251 1222 1252 1223 verify(validate(fly)); … … 1268 1239 fred f3 = {3.7}; 1269 1240 1270 dlist(fred , fred.mine) flm;1241 dlist(fred_in_mine, fred) flm; 1271 1242 insert_last(flm, f1); 1272 1243 insert_last(flm, f2); 1273 1244 insert_last(flm, f3); 1274 1245 1275 dlist(fred , fred.yours) fly;1246 dlist(fred_in_yours, fred) fly; 1276 1247 insert_last(fly, f1); 1277 1248 insert_last(fly, f2); … … 1284 1255 verify(validate(flm)); 1285 1256 1286 fred & popped = try_pop_front(fly);1257 fred & popped = pop_first(fly); 1287 1258 1288 1259 verify(validate(fly)); … … 1304 1275 mary m3 = {3.7}; 1305 1276 1306 dlist(mary ) ml;1277 dlist(mary, mary) ml; 1307 1278 insert_last(ml, m1); 1308 1279 insert_last(ml, m2); … … 1313 1284 verify(validate(ml)); 1314 1285 1315 mary & popped = try_pop_front(ml);1286 mary & popped = pop_first(ml); 1316 1287 1317 1288 verify(validate(ml)); … … 1331 1302 fred f3 = {3.7}; 1332 1303 1333 dlist(fred , fred.mine) flm;1304 dlist(fred_in_mine, fred) flm; 1334 1305 insert_last(flm, f1); 1335 1306 insert_last(flm, f2); 1336 1307 insert_last(flm, f3); 1337 1308 1338 dlist(fred , fred.yours) fly;1309 dlist(fred_in_yours, fred) fly; 1339 1310 insert_last(fly, f1); 1340 1311 insert_last(fly, f2); … … 1347 1318 verify(validate(flm)); 1348 1319 1349 fred & popped = try_pop_back(flm);1320 fred & popped = pop_last(flm); 1350 1321 1351 1322 verify(validate(fly)); … … 1367 1338 fred f3 = {3.7}; 1368 1339 1369 dlist(fred , fred.mine) flm;1340 dlist(fred_in_mine, fred) flm; 1370 1341 insert_last(flm, f1); 1371 1342 insert_last(flm, f2); 1372 1343 insert_last(flm, f3); 1373 1344 1374 dlist(fred , fred.yours) fly;1345 dlist(fred_in_yours, fred) fly; 1375 1346 insert_last(fly, f1); 1376 1347 insert_last(fly, f2); … … 1383 1354 verify(validate(flm)); 1384 1355 1385 fred & popped = try_pop_back(fly);1356 fred & popped = pop_last(fly); 1386 1357 1387 1358 verify(validate(fly)); … … 1403 1374 mary m3 = {3.7}; 1404 1375 1405 dlist(mary ) ml;1376 dlist(mary, mary) ml; 1406 1377 insert_last(ml, m1); 1407 1378 insert_last(ml, m2); … … 1412 1383 verify(validate(ml)); 1413 1384 1414 mary & popped = try_pop_back(ml);1385 mary & popped = pop_last(ml); 1415 1386 1416 1387 verify(validate(ml)); … … 1426 1397 //////////////////////////////////////////////////////////// 1427 1398 // 1428 // Section 4g1429 //1430 // Test cases of `isEmpty, `hasPrev, `hasNext,1431 // try_pop_front, try_pop_back, modifications via `elems1432 //1433 // Example of call-side user code1434 //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 front1487 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 back1509 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 front1531 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 back1553 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 origin1585 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, &vv1596 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 void test__isListed_cases__mary() {1610 1611 mary m1 = {1.7}; assert(! m1`isListed);1612 mary m2 = {2.7}; assert(! m2`isListed);1613 mary m3 = {3.7}; assert(! m3`isListed);1614 1615 dlist(mary) ml;1616 1617 insert_last(ml, m1); assert( m1`isListed); assert(! m2`isListed);1618 insert_last(ml, m2); assert( m2`isListed); assert(! m3`isListed);1619 insert_last(ml, m3); assert( m3`isListed);1620 1621 remove( m1 ); assert(! m1`isListed); assert( m2`isListed);1622 remove( m2 ); assert(! m2`isListed); assert( m3`isListed);1623 remove( m3 ); assert(! m3`isListed);1624 1625 printf("isListed cases done\n");1626 }1627 1628 ////////////////////////////////////////////////////////////1629 //1630 1399 // Section 5 1631 1400 // … … 1635 1404 1636 1405 int main() { 1637 #if 0 1406 1638 1407 sout | "~~~~~~~~~~~~~~~~~ Headless List Tests - insert_after ~~~~~~~~~~~~~~~~"; 1639 1408 sout | ""; … … 1672 1441 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1673 1442 test__insertbefore_singleton_on_singleton__mary(); 1674 #endif 1443 1675 1444 sout | ""; 1676 1445 sout | "~~~~~~~~~~~~~~~~~ Headed List Tests - insert_first ~~~~~~~~~~~~~~~~~~"; … … 1748 1517 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1749 1518 test__insertbefore_before_first__mary(); 1750 #if 01751 1519 1752 1520 sout | ""; … … 1806 1574 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; 1807 1575 test__remove_at_last__mary(); 1808 #endif 1576 1809 1577 sout | ""; 1810 1578 sout | "~~~~~~~~~~ Element removal tests on Headed List: at first ~~~~~~~~~~"; … … 1902 1670 test__pop_last__maries(); 1903 1671 1904 sout | "";1905 sout | "~~~~~~~~~~~~~~~~~~~ Ease-of-access cases ~~~~~~~~~~~~~~~~~~";1906 sout | "";1907 1908 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";1909 sout | "Test 18-i. Modifying Freds on MINE";1910 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";1911 sout | "Not implmented";1912 1913 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";1914 sout | "Test 18-ii. Modifying Freds on YOURS";1915 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";1916 sout | "Not implmented";1917 1918 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";1919 sout | "Test 18-iii. Modifying Maries";1920 sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";1921 1922 test__accessor_cases__mary();1923 test__try_pop__mary();1924 test__origin_mutation__mary();1925 test__isListed_cases__mary();1926 1927 1672 return 0; 1928 1673 }
Note:
See TracChangeset
for help on using the changeset viewer.