Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tests/list/dlist-insert-remove.cfa

    rc2794b2 rf2d05e9  
    1919struct fred {
    2020        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)
    2323};
    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
     25DLISTED_MGD_EXPL_OUT(fred, mine)
     26DLISTED_MGD_EXPL_OUT(fred, yours)
    2927
    3028void ?{}(fred &this, float adatum) {
     
    3533struct mary {
    3634        float anotherdatum;
    37         inline dlink(mary);
     35        DLISTED_MGD_IMPL_IN(mary)
    3836};
    3937
    40 P9_EMBEDDED(mary, dlink(mary))
     38DLISTED_MGD_IMPL_OUT(mary)
    4139
    4240void ?{}(mary &this, float anotherdatum) {
     
    5553////////////////////////////////////////////////////////////
    5654
    57 void printMyFredsFwd(fred & f) {
    58     with( DLINK_VIA( fred, fred.mine ) )
    59         do {
     55void printMyFredsFwd(fred &f) {
     56        while (&f != 0p) {
    6057                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
     62void printMyFredsRev(fred &f) {
     63        while (&f != 0p) {
    6764                sout | f.adatum;
    68         } while (f`movePrev);
    69 }
    70 
     65                &f = &f`in_mine`prev;
     66        }
     67}
    7168
    7269void printMyFreddies(fred &f1, fred &f2, int isBefore) {
     
    7673                sout | "==== fred by MINE after ";
    7774        }
    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
     81void printYourFredsFwd(fred &f) {
     82        while (&f != 0p) {
     83                sout | f.adatum;
     84                &f = &f`in_yours`next;
    8385        }
    84         if (&f2) {
    85                 printMyFredsFwd(f2);    sout | '-';
    86                 printMyFredsRev(f2);    sout | '-';
    87         } else {
    88                 sout | '-'; sout | '-';
     86}
     87
     88void printYourFredsRev(fred &f) {
     89        while (&f != 0p) {
     90                sout | f.adatum;
     91                &f = &f`in_yours`prev;
    8992        }
    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);
    10493}
    10594
     
    11099                sout | "==== fred by YOURS after ";
    111100        }
    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
     107void printMariesFwd(mary &m) {
     108        while (&m != 0p) {
     109                sout | m.anotherdatum;
     110                &m = &m`next;
    117111        }
    118         if (&f2) {
    119                 printYourFredsFwd(f2);  sout | '-';
    120                 printYourFredsRev(f2);  sout | '-';
    121         } else {
    122                 sout | '-'; sout | '-';
     112}
     113
     114void printMariesRev(mary &m) {
     115        while (&m != 0p) {
     116                sout | m.anotherdatum;
     117                &m = &m`prev;
    123118        }
    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);
    136119}
    137120
     
    142125                sout | "==== mary after ";
    143126        }
    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 | '-';
    156131}
    157132
     
    178153//  - from list position #2 moving backward (d)
    179154// The expected-output comments are in form a;b;c;d where a::=num,num,num
    180 #if 0
     155
    181156void test__insertafter_singleton_on_singleton__fred_mine () {
    182157        fred f1 = {3.14};
     
    186161        printYourFreddies(f1, f2, 1);   // 3.14; 3.14; 0.5; 0.5
    187162
    188         diref(fred, fred.mine) f1_mine = f1`from;
    189         insert_after(f1_mine, f2);
     163        insert_after(f1`in_mine, f2);
    190164
    191165        printMyFreddies(f1, f2, 0);     // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified)
     
    200174        printYourFreddies(f1, f2, 1);   // 3.14; 3.14; 0.5; 0.5
    201175
    202         diref(fred, fred.yours) f1_yours = f1`from;
    203         insert_after(f1_yours, f2);
     176        insert_after(f1`in_yours, f2);
    204177
    205178        printMyFreddies(f1, f2, 0);     // 3.14; 3.14; 0.5; 0.5 (unmodified)
     
    235208        printYourFreddies(f1, f2, 1);   // 3.14; 3.14; 0.5; 0.5
    236209
    237         diref(fred, fred.mine) f2_mine = f2`from;
    238         insert_before(f2_mine, f1);
     210        insert_before(f2`in_mine, f1);
    239211
    240212        printMyFreddies(f1, f2, 0);     // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified)
     
    249221        printYourFreddies(f1, f2, 1);   // 3.14; 3.14; 0.5; 0.5
    250222
    251         diref(fred, fred.yours) f2_yours = f2`from;
    252         insert_before(f2_yours, f1);
     223        insert_before(f2`in_yours, f1);
    253224
    254225        printMyFreddies(f1, f2, 0);     // 3.14; 3.14; 0.5; 0.5 (unmodified)
     
    266237        printMariatheotokos(m1, m2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified)
    267238}
    268 #endif
     239
    269240////////////////////////////////////////////////////////////
    270241//
     
    279250// All three tests exercise the case of creating an empty container and
    280251// adding two items to it.
     252
    281253void test__insertfirst_two_on_empty__fred_mine() {
    282254
     
    284256        fred f2 = {0.5};
    285257
    286         dlist(fred, fred.mine) lf;
     258        dlist(fred_in_mine, fred) lf;
    287259
    288260        verify(validate(lf));
     
    305277        fred f2 = {0.5};
    306278
    307         dlist(fred, fred.yours) lf;
     279        dlist(fred_in_yours, fred) lf;
    308280
    309281        verify(validate(lf));
     
    320292        printYourFreddies(f1, f2, 0);   // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified)
    321293}
     294
    322295void test__insertfirst_two_on_empty__mary() {
    323296
     
    325298        mary m2 = {0.5};
    326299
    327         dlist(mary) lm;
     300        dlist(mary, mary) lm;
    328301
    329302        verify(validate(lm));
     
    352325        fred f2 = {0.5};
    353326
    354         dlist(fred, fred.mine) lf;
     327        dlist(fred_in_mine, fred) lf;
    355328
    356329        verify(validate(lf));
     
    373346        fred f2 = {0.5};
    374347
    375         dlist(fred, fred.yours) lf;
     348        dlist(fred_in_yours, fred) lf;
    376349
    377350        verify(validate(lf));
     
    394367        mary m2 = {0.5};
    395368
    396         dlist(mary) lm;
     369        dlist(mary, mary) lm;
    397370
    398371        verify(validate(lm));
     
    421394        fred f2 = {0.5};
    422395
    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);
    427400
    428401        insert_first(lf, f1);
    429402
    430         assert( & lf`first == & f1 );
    431         assert( & lf`last  == & f1 );
     403        assert(& lf`first == & f1);
     404        assert(& lf`last == & f1);
    432405
    433406        verify(validate(lf));
    434407
    435         with ( DLINK_VIA(fred, fred.mine) ) insert_after(f1, f2);
     408        insert_after(f1`in_mine, f2);
    436409
    437410        verify(validate(lf));
     
    440413        printYourFreddies(f1, f2, 0);   // 3.14; 3.14; 0.5; 0.5 (unmodified)
    441414
    442         assert( & lf`first == & f1 );
    443         assert( & lf`last  == & f2 );
     415        assert(& lf`first == & f1);
     416        assert(& lf`last == & f2);
    444417}
    445418
     
    449422        fred f2 = {0.5};
    450423
    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);
    455428
    456429        insert_first(lf, f1);
    457430
    458         assert( & lf`first == & f1 );
    459         assert( & lf`last  == & f1 );
     431        assert(& lf`first == & f1);
     432        assert(& lf`last == & f1);
    460433
    461434        verify(validate(lf));
    462435
    463     with ( DLINK_VIA(fred, fred.yours) ) insert_after(f1, f2);
     436        insert_after(f1`in_yours, f2);
    464437
    465438        verify(validate(lf));
     
    468441        printYourFreddies(f1, f2, 0);   // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified)
    469442
    470         assert( & lf`first == & f1 );
    471         assert( & lf`last  == & f2 );
     443        assert(& lf`first == & f1);
     444        assert(& lf`last == & f2);
    472445}
    473446
     
    477450        mary m2 = {0.5};
    478451
    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);
    483456
    484457        insert_first(lm, m1);
    485458
    486         assert( & lm`first == & m1 );
    487         assert( & lm`last  == & m1 );
     459        assert(& lm`first == & m1);
     460        assert(& lm`last == & m1);
    488461
    489462        verify(validate(lm));
     
    495468        printMariatheotokos(m1, m2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified)
    496469
    497         assert( & lm`first == & m1 );
    498         assert( & lm`last  == & m2 );
     470        assert(& lm`first == & m1);
     471        assert(& lm`last == & m2);
    499472}
    500473
     
    514487        fred f2 = {0.5};
    515488
    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);
    520493
    521494        insert_last(lf, f2);
    522495
    523         assert( & lf`first == & f2 );
    524         assert( & lf`last  == & f2 );
     496        assert(& lf`first == & f2);
     497        assert(& lf`last == & f2);
    525498
    526499        verify(validate(lf));
    527500
    528         with ( DLINK_VIA(fred, fred.mine) ) insert_before(f2, f1);
     501        insert_before(f2`in_mine, f1);
    529502
    530503        verify(validate(lf));
     
    533506        printYourFreddies(f1, f2, 0);   // 3.14; 3.14; 0.5; 0.5 (unmodified)
    534507
    535         assert( & lf`first == & f1 );
    536         assert( & lf`last  == & f2 );
     508        assert(& lf`first == & f1);
     509        assert(& lf`last == & f2);
    537510}
    538511
     
    542515        fred f2 = {0.5};
    543516
    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);
    548521
    549522        insert_last(lf, f2);
    550523
    551         assert( & lf`first == & f2 );
    552         assert( & lf`last  == & f2 );
     524        assert(& lf`first == & f2);
     525        assert(& lf`last == & f2);
    553526
    554527        verify(validate(lf));
    555528
    556         with ( DLINK_VIA(fred, fred.yours) )insert_before(f2, f1);
     529        insert_before(f2`in_yours, f1);
    557530
    558531        verify(validate(lf));
     
    561534        printYourFreddies(f1, f2, 0);   // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified)
    562535
    563         assert( & lf`first == & f1 );
    564         assert( & lf`last  == & f2 );
     536        assert(& lf`first == & f1);
     537        assert(& lf`last == & f2);
    565538}
    566539
     
    570543        mary m2 = {0.5};
    571544
    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);
    576549
    577550        insert_last(lm, m2);
    578551
    579         assert( & lm`first == & m2 );
    580         assert( & lm`last  == & m2 );
     552        assert(& lm`first == & m2);
     553        assert(& lm`last == & m2);
    581554
    582555        verify(validate(lm));
     
    588561        printMariatheotokos(m1, m2, 0); // 3.14, 0.5; 3.14; 0.5; 0.5, 3.14 (modified)
    589562
    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}
    594566
    595567////////////////////////////////////////////////////////////
     
    874846//
    875847////////////////////////////////////////////////////////////
    876 #endif
     848
    877849void test__remove_at_head__fred_mine() {
    878850
     
    881853        fred f3 = {3.7};
    882854
    883         dlist(fred, fred.mine) flm;
     855        dlist(fred_in_mine, fred) flm;
    884856        insert_last(flm, f1);
    885857        insert_last(flm, f2);
    886858        insert_last(flm, f3);
    887859
    888         dlist(fred, fred.yours) fly;
     860        dlist(fred_in_yours, fred) fly;
    889861        insert_last(fly, f1);
    890862        insert_last(fly, f2);
     
    897869        verify(validate(flm));
    898870
    899         with( DLINK_VIA(fred, fred.mine) ) remove(f1);
     871        remove(f1`in_mine);
    900872
    901873        verify(validate(fly));
     
    909881
    910882        // 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}
    915886
    916887void test__remove_at_head__fred_yours() {
     
    920891        fred f3 = {3.7};
    921892
    922         dlist(fred, fred.mine) flm;
     893        dlist(fred_in_mine, fred) flm;
    923894        insert_last(flm, f1);
    924895        insert_last(flm, f2);
    925896        insert_last(flm, f3);
    926897
    927         dlist(fred, fred.yours) fly;
     898        dlist(fred_in_yours, fred) fly;
    928899        insert_last(fly, f1);
    929900        insert_last(fly, f2);
     
    936907        verify(validate(flm));
    937908
    938         with( DLINK_VIA(fred, fred.yours) ) remove(f1);
     909        remove(f1`in_yours);
    939910
    940911        verify(validate(fly));
     
    948919
    949920        // 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);
    952923}
    953924
     
    958929        mary m3 = {3.7};
    959930
    960         dlist(mary) ml;
     931        dlist(mary, mary) ml;
    961932        insert_last(ml, m1);
    962933        insert_last(ml, m2);
     
    977948
    978949        // 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);
    981952}
    982953
     
    997968        fred f3 = {3.7};
    998969
    999         dlist(fred, fred.mine) flm;
     970        dlist(fred_in_mine, fred) flm;
    1000971        insert_last(flm, f1);
    1001972        insert_last(flm, f2);
    1002973        insert_last(flm, f3);
    1003974
    1004         dlist(fred, fred.yours) fly;
     975        dlist(fred_in_yours, fred) fly;
    1005976        insert_last(fly, f1);
    1006977        insert_last(fly, f2);
     
    1013984        verify(validate(flm));
    1014985
    1015         with( DLINK_VIA(fred, fred.mine) ) remove(f3);
     986        remove(f3`in_mine);
    1016987
    1017988        verify(validate(fly));
     
    1025996
    1026997        // 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);
    10291000}
    10301001
     
    10351006        fred f3 = {3.7};
    10361007
    1037         dlist(fred, fred.mine) flm;
     1008        dlist(fred_in_mine, fred) flm;
    10381009        insert_last(flm, f1);
    10391010        insert_last(flm, f2);
    10401011        insert_last(flm, f3);
    10411012
    1042         dlist(fred, fred.yours) fly;
     1013        dlist(fred_in_yours, fred) fly;
    10431014        insert_last(fly, f1);
    10441015        insert_last(fly, f2);
     
    10511022        verify(validate(flm));
    10521023
    1053         with( DLINK_VIA(fred, fred.yours) ) remove(f3);
     1024        remove(f3`in_yours);
    10541025
    10551026        verify(validate(fly));
     
    10631034
    10641035        // 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);
    10671038}
    10681039
     
    10731044        mary m3 = {3.7};
    10741045
    1075         dlist(mary) ml;
     1046        dlist(mary, mary) ml;
    10761047        insert_last(ml, m1);
    10771048        insert_last(ml, m2);
     
    10921063
    10931064        // 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);
    10961067}
    10971068
     
    11101081        fred f = {0.7};
    11111082
    1112         dlist(fred, fred.mine) flm;
     1083        dlist(fred_in_mine, fred) flm;
    11131084        insert_last(flm, f);
    11141085
    1115         dlist(fred, fred.yours) fly;
     1086        dlist(fred_in_yours, fred) fly;
    11161087        insert_last(fly, f);
    11171088
     
    11221093        verify(validate(flm));
    11231094
    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);
    11311102
    11321103        printYourFreddies(fly`first, fly`last, 0);   // 0.7; 0.7; 0.7; 0.7 (unmodified)
     
    11361107
    11371108        // 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);
    11401111
    11411112        insert_last(flm, f);
     
    11491120        fred f = {0.7};
    11501121
    1151         dlist(fred, fred.mine) flm;
     1122        dlist(fred_in_mine, fred) flm;
    11521123        insert_last(flm, f);
    11531124
    1154         dlist(fred, fred.yours) fly;
     1125        dlist(fred_in_yours, fred) fly;
    11551126        insert_last(fly, f);
    11561127
     
    11611132        verify(validate(flm));
    11621133
    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);
    11701141
    11711142        printYourFreddies(flm`first, flm`last, 0);   // 0.7; 0.7; 0.7; 0.7 (unmodified)
     
    11751146
    11761147        // 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);
    11791150
    11801151        insert_last(fly, f);
     
    11881159        mary m = {0.7};
    11891160
    1190         dlist(mary) ml;
     1161        dlist(mary, mary) ml;
    11911162        insert_last(ml, m);
    11921163
     
    11991170        verify(validate(ml));
    12001171
    1201         assert( & ml`first == 0p );
    1202         assert( & ml`last == 0p );
     1172        assert(& ml`first == 0p);
     1173        assert(& ml`last  == 0p);
    12031174
    12041175        // observe f is solo in mine (now unlisted); in yours, it was just traversed
     
    12061177
    12071178        // 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);
    12101181
    12111182        insert_last(ml, m);
     
    12321203        fred f3 = {3.7};
    12331204
    1234         dlist(fred, fred.mine) flm;
     1205        dlist(fred_in_mine, fred) flm;
    12351206        insert_last(flm, f1);
    12361207        insert_last(flm, f2);
    12371208        insert_last(flm, f3);
    12381209
    1239         dlist(fred, fred.yours) fly;
     1210        dlist(fred_in_yours, fred) fly;
    12401211        insert_last(fly, f1);
    12411212        insert_last(fly, f2);
     
    12481219        verify(validate(flm));
    12491220
    1250         fred & popped = try_pop_front(flm);
     1221        fred & popped = pop_first(flm);
    12511222
    12521223        verify(validate(fly));
     
    12681239        fred f3 = {3.7};
    12691240
    1270         dlist(fred, fred.mine) flm;
     1241        dlist(fred_in_mine, fred) flm;
    12711242        insert_last(flm, f1);
    12721243        insert_last(flm, f2);
    12731244        insert_last(flm, f3);
    12741245
    1275         dlist(fred, fred.yours) fly;
     1246        dlist(fred_in_yours, fred) fly;
    12761247        insert_last(fly, f1);
    12771248        insert_last(fly, f2);
     
    12841255        verify(validate(flm));
    12851256
    1286         fred & popped = try_pop_front(fly);
     1257        fred & popped = pop_first(fly);
    12871258
    12881259        verify(validate(fly));
     
    13041275        mary m3 = {3.7};
    13051276
    1306         dlist(mary) ml;
     1277        dlist(mary, mary) ml;
    13071278        insert_last(ml, m1);
    13081279        insert_last(ml, m2);
     
    13131284        verify(validate(ml));
    13141285
    1315         mary & popped = try_pop_front(ml);
     1286        mary & popped = pop_first(ml);
    13161287
    13171288        verify(validate(ml));
     
    13311302        fred f3 = {3.7};
    13321303
    1333         dlist(fred, fred.mine) flm;
     1304        dlist(fred_in_mine, fred) flm;
    13341305        insert_last(flm, f1);
    13351306        insert_last(flm, f2);
    13361307        insert_last(flm, f3);
    13371308
    1338         dlist(fred, fred.yours) fly;
     1309        dlist(fred_in_yours, fred) fly;
    13391310        insert_last(fly, f1);
    13401311        insert_last(fly, f2);
     
    13471318        verify(validate(flm));
    13481319
    1349         fred & popped = try_pop_back(flm);
     1320        fred & popped = pop_last(flm);
    13501321
    13511322        verify(validate(fly));
     
    13671338        fred f3 = {3.7};
    13681339
    1369         dlist(fred, fred.mine) flm;
     1340        dlist(fred_in_mine, fred) flm;
    13701341        insert_last(flm, f1);
    13711342        insert_last(flm, f2);
    13721343        insert_last(flm, f3);
    13731344
    1374         dlist(fred, fred.yours) fly;
     1345        dlist(fred_in_yours, fred) fly;
    13751346        insert_last(fly, f1);
    13761347        insert_last(fly, f2);
     
    13831354        verify(validate(flm));
    13841355
    1385         fred & popped = try_pop_back(fly);
     1356        fred & popped = pop_last(fly);
    13861357
    13871358        verify(validate(fly));
     
    14031374        mary m3 = {3.7};
    14041375
    1405         dlist(mary) ml;
     1376        dlist(mary, mary) ml;
    14061377        insert_last(ml, m1);
    14071378        insert_last(ml, m2);
     
    14121383        verify(validate(ml));
    14131384
    1414         mary & popped = try_pop_back(ml);
     1385        mary & popped = pop_last(ml);
    14151386
    14161387        verify(validate(ml));
     
    14261397////////////////////////////////////////////////////////////
    14271398//
    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 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 //
    16301399// Section 5
    16311400//
     
    16351404
    16361405int main() {
    1637 #if 0
     1406
    16381407        sout | "~~~~~~~~~~~~~~~~~ Headless List Tests - insert_after ~~~~~~~~~~~~~~~~";
    16391408        sout | "";
     
    16721441        sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
    16731442        test__insertbefore_singleton_on_singleton__mary();
    1674 #endif
     1443
    16751444        sout | "";
    16761445        sout | "~~~~~~~~~~~~~~~~~ Headed List Tests - insert_first ~~~~~~~~~~~~~~~~~~";
     
    17481517        sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
    17491518        test__insertbefore_before_first__mary();
    1750 #if 0
    17511519
    17521520        sout | "";
     
    18061574        sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
    18071575        test__remove_at_last__mary();
    1808 #endif
     1576
    18091577        sout | "";
    18101578        sout | "~~~~~~~~~~ Element removal tests on Headed List: at first ~~~~~~~~~~";
     
    19021670        test__pop_last__maries();
    19031671
    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 
    19271672        return 0;
    19281673}
Note: See TracChangeset for help on using the changeset viewer.