OSDN Git Service

add tests and fix bugs
authorornse01 <ornse01@users.sourceforge.jp>
Mon, 30 Apr 2012 17:28:21 +0000 (17:28 +0000)
committerornse01 <ornse01@users.sourceforge.jp>
Mon, 30 Apr 2012 17:28:21 +0000 (17:28 +0000)
- fix index handling in swap
- fix selected index in editing
- fix counting number in editing

git-svn-id: http://svn.sourceforge.jp/svnroot/bchan/bchanl/trunk@455 20a0b8eb-f62a-4a12-8fe1-b598822500fb

src/extbbslist.c
src/test_extbbslist.c

index 11f0639..d003f79 100644 (file)
@@ -555,7 +555,7 @@ IMPORT W extbbslist_editcontext_swapitem(extbbslist_editcontext_t *ctx, W i0, W
        if (i0 == i1) {
                return 0;
        }
-       if (i1 > i0) {
+       if (i0 > i1) {
                buf = i1;
                i1 = i0;
                i0 = buf;
@@ -572,6 +572,12 @@ IMPORT W extbbslist_editcontext_swapitem(extbbslist_editcontext_t *ctx, W i0, W
        }
        item1_next = extbbslist_item_nextnode(item1);
 
+       if (ctx->selected.index == i0) {
+               ctx->selected.index = i1;
+       } else if (ctx->selected.index == i1) {
+               ctx->selected.index = i0;
+       }
+
        if (i0 + 1 == i1) {
                extbbslist_item_QueRemove(item1);
                extbbslist_item_QueInsert(item1, item0);
@@ -594,13 +600,15 @@ IMPORT W extbbslist_editcontext_deleteitem(extbbslist_editcontext_t *ctx, W i)
        if (item == NULL) {
                return -1; /* TODO */
        }
+       extbbslist_item_delete(item);
        ctx->num--;
        if (ctx->selected.index == i) {
                ctx->selected.item = NULL;
                ctx->selected.index = -1;
        }
-       ctx->selected.item = item;
-       ctx->selected.index = i;
+       if (ctx->selected.index > i) {
+               ctx->selected.index--;
+       }
        return 0;
 }
 
@@ -742,6 +750,10 @@ EXPORT VOID extbbslist_endedit(extbbslist_t *list, extbbslist_editcontext_t *ctx
 
                        sentinel = extbbslist_sentinelnode(list);
                        extbbslist_item_QueInsert(sentinel, next);
+
+                       list->num = ctx->num;
+               } else {
+                       list->num = 0;
                }
        }
 
index f4328e9..e9cc8ad 100644 (file)
@@ -44,16 +44,127 @@ LOCAL UB test_extbbslist_testurl001[] = "http://aaa.bbb.ccc/abcdef/";
 LOCAL UB test_extbbslist_testurl002[] = "http://ddd.eee.fff/abcdef/";
 LOCAL UB test_extbbslist_testurl003[] = "http://aaa.bbb.ccc/ghijkl/";
 LOCAL UB test_extbbslist_testurl004[] = "http://aaa.bbb.ccc/mnopqr/";
+LOCAL UB test_extbbslist_testurl005[] = "http://a/a/";
+LOCAL UB test_extbbslist_testurl006[] = "http://b/a/";
+LOCAL UB test_extbbslist_testurl007[] = "http://c/a/";
+LOCAL UB test_extbbslist_testurl008[] = "http://d/a/";
+LOCAL TC test_extbbslist_testTCurl005[] = {TK_h, TK_t, TK_t, TK_p, TK_COLN, TK_SLSH, TK_SLSH, TK_a, TK_SLSH, TK_a, TK_SLSH, TNULL};
+LOCAL TC test_extbbslist_testTCurl006[] = {TK_h, TK_t, TK_t, TK_p, TK_COLN, TK_SLSH, TK_SLSH, TK_b, TK_SLSH, TK_a, TK_SLSH, TNULL};
+LOCAL TC test_extbbslist_testTCurl007[] = {TK_h, TK_t, TK_t, TK_p, TK_COLN, TK_SLSH, TK_SLSH, TK_c, TK_SLSH, TK_a, TK_SLSH, TNULL};
+LOCAL TC test_extbbslist_testTCurl008[] = {TK_h, TK_t, TK_t, TK_p, TK_COLN, TK_SLSH, TK_SLSH, TK_d, TK_SLSH, TK_a, TK_SLSH, TNULL};
+
+struct testextbbslist_input_t_ {
+       TC *title;
+       W title_len;
+       TC *url;
+       W url_len;
+};
+typedef struct testextbbslist_input_t_ testextbbslist_input_t;
+
+struct testextbbslist_expected_t_ {
+       TC *title;
+       W title_len;
+       UB *url;
+       W url_len;
+};
+typedef struct testextbbslist_expected_t_ testextbbslist_expected_t;
+
+LOCAL W test_extbbslist_appenditem(extbbslist_editcontext_t *ctx, testextbbslist_input_t *input, W input_len)
+{
+       W i, err, title_len, url_len;
+       TC *title, *url;
+
+       for (i = 0; i < input_len; i++) {
+               title = input[i].title;
+               title_len = input[i].title_len;
+               url = input[i].url;
+               url_len = input[i].url_len;
+               err = extbbslist_editcontext_append(ctx, title, title_len, url, url_len);
+               if (err < 0) {
+                       printf("extbbslist_editcontext_appenditem %d\n", i);
+                       return err;
+               }
+       }
+
+       return 0;
+}
+
+LOCAL W test_extbbslist_checkexpected(extbbslist_t *list, testextbbslist_expected_t *expected, W expected_len)
+{
+       W ret = 0, i, title_len, url_len;
+       TC *title;
+       UB *url;
+       Bool cont;
+       extbbslist_readcontext_t *ctx;
+
+       ctx = extbbslist_startread(list);
+       if (ctx == NULL) {
+               printf("extbbslist_startread\n");
+               return -1;
+       }
+
+       for (i = 0; i < expected_len; i++) {
+               cont = extbbslist_readcontext_getnext(ctx, &title, &title_len, &url, &url_len);
+               if (cont == False) {
+                       printf("extbbslist_readcontext_getnext return value %d\n", i);
+                       ret = -1;
+               }
+               if (tc_strncmp(title, expected[i].title, title_len) != 0) {
+                       printf("extbbslist_readcontext_getnext title %d\n", i);
+                       ret = -1;
+               }
+               if (strncmp(url, expected[i].url, url_len) != 0) {
+                       printf("extbbslist_readcontext_getnext url %d\n", i);
+                       printf("                               expected = %s\n", expected[i].url);
+                       printf("                               result = %s\n", url);
+                       ret = -1;
+               }
+       }
+       cont = extbbslist_readcontext_getnext(ctx, &title, &title_len, &url, &url_len);
+       if (cont != False) {
+               printf("extbbslist_readcontext_getnext return value last\n");
+               ret = -1;
+       }
+
+       extbbslist_endread(list, ctx);
+
+       return ret;     
+}
 
 LOCAL UNITTEST_RESULT test_extbbslist_1()
 {
        extbbslist_t *list;
-       extbbslist_readcontext_t *ctx;
        UNITTEST_RESULT result = UNITTEST_RESULT_PASS;
        TC *title;
        UB *url;
        W err, title_len, url_len;
-       Bool cont;
+       testextbbslist_expected_t expected[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testurl001,
+                       strlen(test_extbbslist_testurl001)
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testurl002,
+                       strlen(test_extbbslist_testurl002)
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testurl003,
+                       strlen(test_extbbslist_testurl003)
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testurl004,
+                       strlen(test_extbbslist_testurl004)
+               },
+       };
+       W expected_len = sizeof(expected)/sizeof(testextbbslist_expected_t);
 
        list = extbbslist_new(NULL, 0, 0);
 
@@ -94,75 +205,11 @@ LOCAL UNITTEST_RESULT test_extbbslist_1()
                result = UNITTEST_RESULT_FAIL;
        }
 
-       ctx = extbbslist_startread(list);
-       if (ctx == NULL) {
-               printf("extbbslist_startread\n");
-               extbbslist_delete(list);
-               return UNITTEST_RESULT_FAIL;
-       }
-
-       cont = extbbslist_readcontext_getnext(ctx, &title, &title_len, &url, &url_len);
-       if (cont == False) {
-               printf("extbbslist_readcontext_getnext return value 001\n");
-               result = UNITTEST_RESULT_FAIL;
-       }
-       if (tc_strncmp(title, test_extbbslist_testtitle001, title_len) != 0) {
-               printf("extbbslist_readcontext_getnext title 001\n");
-               result = UNITTEST_RESULT_FAIL;
-       }
-       if (strncmp(url, test_extbbslist_testurl001, url_len) != 0) {
-               printf("extbbslist_readcontext_getnext url 001\n");
-               printf("                               expected = %s\n", test_extbbslist_testurl001);
-               printf("                               result = %s\n", url);
-               result = UNITTEST_RESULT_FAIL;
-       }
-       cont = extbbslist_readcontext_getnext(ctx, &title, &title_len, &url, &url_len);
-       if (cont == False) {
-               printf("extbbslist_readcontext_getnext return value 002\n");
-               result = UNITTEST_RESULT_FAIL;
-       }
-       if (tc_strncmp(title, test_extbbslist_testtitle002, title_len) != 0) {
-               printf("extbbslist_readcontext_getnext title 002\n");
-               result = UNITTEST_RESULT_FAIL;
-       }
-       if (strncmp(url, test_extbbslist_testurl002, url_len) != 0) {
-               printf("extbbslist_readcontext_getnext url 002\n");
-               result = UNITTEST_RESULT_FAIL;
-       }
-       cont = extbbslist_readcontext_getnext(ctx, &title, &title_len, &url, &url_len);
-       if (cont == False) {
-               printf("extbbslist_readcontext_getnext return value 003\n");
-               result = UNITTEST_RESULT_FAIL;
-       }
-       if (tc_strncmp(title, test_extbbslist_testtitle003, title_len) != 0) {
-               printf("extbbslist_readcontext_getnext title 003\n");
-               result = UNITTEST_RESULT_FAIL;
-       }
-       if (strncmp(url, test_extbbslist_testurl003, url_len) != 0) {
-               printf("extbbslist_readcontext_getnext url 003\n");
-               result = UNITTEST_RESULT_FAIL;
-       }
-       cont = extbbslist_readcontext_getnext(ctx, &title, &title_len, &url, &url_len);
-       if (cont == False) {
-               printf("extbbslist_readcontext_getnext return value 004\n");
-               result = UNITTEST_RESULT_FAIL;
-       }
-       if (tc_strncmp(title, test_extbbslist_testtitle004, title_len) != 0) {
-               printf("extbbslist_readcontext_getnext title 004\n");
-               result = UNITTEST_RESULT_FAIL;
-       }
-       if (strncmp(url, test_extbbslist_testurl004, url_len) != 0) {
-               printf("extbbslist_readcontext_getnext url 004\n");
-               result = UNITTEST_RESULT_FAIL;
-       }
-       cont = extbbslist_readcontext_getnext(ctx, &title, &title_len, &url, &url_len);
-       if (cont != False) {
-               printf("extbbslist_readcontext_getnext return value 005\n");
+       err = test_extbbslist_checkexpected(list, expected, expected_len);
+       if (err < 0) {
                result = UNITTEST_RESULT_FAIL;
        }
 
-       extbbslist_endread(list, ctx);
-
        extbbslist_delete(list);
 
        return result;
@@ -262,8 +309,1108 @@ LOCAL UNITTEST_RESULT test_extbbslist_2()
        return result;
 }
 
+LOCAL UNITTEST_RESULT test_extbbslist_3()
+{
+       extbbslist_t *list;
+       extbbslist_editcontext_t *editctx;
+       UNITTEST_RESULT result = UNITTEST_RESULT_PASS;
+       W err;
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+       testextbbslist_expected_t expected[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testurl005,
+                       strlen(test_extbbslist_testurl005)
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testurl006,
+                       strlen(test_extbbslist_testurl006)
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testurl007,
+                       strlen(test_extbbslist_testurl007)
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testurl008,
+                       strlen(test_extbbslist_testurl008)
+               },
+       };
+       W expected_len = sizeof(expected)/sizeof(testextbbslist_expected_t);
+
+       list = extbbslist_new(NULL, 0, 0);
+
+       editctx = extbbslist_startedit(list);
+       if (editctx == NULL) {
+               printf("extbbslist_startedit\n");
+               extbbslist_delete(list);
+               return UNITTEST_RESULT_FAIL;
+       }
+       err = test_extbbslist_appenditem(editctx, input, input_len);
+       if (err < 0) {
+               result = UNITTEST_RESULT_FAIL;
+       }
+       extbbslist_endedit(list, editctx, True);
+
+       err = test_extbbslist_checkexpected(list, expected, expected_len);
+       if (err < 0) {
+               result = UNITTEST_RESULT_FAIL;
+       }
+
+       extbbslist_delete(list);
+
+       return result;
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_4()
+{
+       extbbslist_t *list;
+       extbbslist_editcontext_t *editctx;
+       UNITTEST_RESULT result = UNITTEST_RESULT_PASS;
+       W err;
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+
+       list = extbbslist_new(NULL, 0, 0);
+
+       editctx = extbbslist_startedit(list);
+       if (editctx == NULL) {
+               printf("extbbslist_startedit\n");
+               extbbslist_delete(list);
+               return UNITTEST_RESULT_FAIL;
+       }
+       err = test_extbbslist_appenditem(editctx, input, input_len);
+       if (err < 0) {
+               result = UNITTEST_RESULT_FAIL;
+       }
+       extbbslist_endedit(list, editctx, False);
+
+       err = test_extbbslist_checkexpected(list, NULL, 0);
+       if (err < 0) {
+               result = UNITTEST_RESULT_FAIL;
+       }
+
+       extbbslist_delete(list);
+
+       return result;
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_5()
+{
+       extbbslist_t *list;
+       extbbslist_editcontext_t *editctx;
+       UNITTEST_RESULT result = UNITTEST_RESULT_PASS;
+       W err, num;
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+
+       list = extbbslist_new(NULL, 0, 0);
+
+       editctx = extbbslist_startedit(list);
+       if (editctx == NULL) {
+               printf("extbbslist_startedit\n");
+               extbbslist_delete(list);
+               return UNITTEST_RESULT_FAIL;
+       }
+       err = test_extbbslist_appenditem(editctx, input, input_len);
+       if (err < 0) {
+               result = UNITTEST_RESULT_FAIL;
+       }
+       extbbslist_endedit(list, editctx, True);
+
+       num = extbbslist_number(list);
+       if (num != 4) {
+               printf("extbbslist_number 002\n");
+               result = UNITTEST_RESULT_FAIL;
+       }
+
+       extbbslist_delete(list);
+
+       return result;
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_6()
+{
+       extbbslist_t *list;
+       extbbslist_editcontext_t *editctx;
+       UNITTEST_RESULT result = UNITTEST_RESULT_PASS;
+       W err, num;
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+
+       list = extbbslist_new(NULL, 0, 0);
+
+
+       editctx = extbbslist_startedit(list);
+       if (editctx == NULL) {
+               printf("extbbslist_startedit\n");
+               extbbslist_delete(list);
+               return UNITTEST_RESULT_FAIL;
+       }
+       err = test_extbbslist_appenditem(editctx, input, input_len);
+       if (err < 0) {
+               result = UNITTEST_RESULT_FAIL;
+       }
+       extbbslist_endedit(list, editctx, False);
+
+       num = extbbslist_number(list);
+       if (num != 0) {
+               printf("extbbslist_number 002\n");
+               result = UNITTEST_RESULT_FAIL;
+       }
+
+       extbbslist_delete(list);
+
+       return result;
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_7()
+{
+       extbbslist_t *list;
+       extbbslist_editcontext_t *editctx;
+       UNITTEST_RESULT result = UNITTEST_RESULT_PASS;
+       W err;
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+       testextbbslist_expected_t expected[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testurl005,
+                       strlen(test_extbbslist_testurl005)
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testurl006,
+                       strlen(test_extbbslist_testurl006)
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testurl008,
+                       strlen(test_extbbslist_testurl008)
+               },
+       };
+       W expected_len = sizeof(expected)/sizeof(testextbbslist_expected_t);
+
+       list = extbbslist_new(NULL, 0, 0);
+
+       editctx = extbbslist_startedit(list);
+       if (editctx == NULL) {
+               printf("extbbslist_startedit\n");
+               extbbslist_delete(list);
+               return UNITTEST_RESULT_FAIL;
+       }
+       err = test_extbbslist_appenditem(editctx, input, input_len);
+       if (err < 0) {
+               result = UNITTEST_RESULT_FAIL;
+       }
+       extbbslist_editcontext_deleteitem(editctx, 2);
+       extbbslist_endedit(list, editctx, True);
+
+       err = test_extbbslist_checkexpected(list, expected, expected_len);
+       if (err < 0) {
+               result = UNITTEST_RESULT_FAIL;
+       }
+
+       extbbslist_delete(list);
+
+       return result;
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_8()
+{
+       extbbslist_t *list;
+       extbbslist_editcontext_t *editctx;
+       UNITTEST_RESULT result = UNITTEST_RESULT_PASS;
+       W err, num;
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+
+       list = extbbslist_new(NULL, 0, 0);
+
+       editctx = extbbslist_startedit(list);
+       if (editctx == NULL) {
+               printf("extbbslist_startedit\n");
+               extbbslist_delete(list);
+               return UNITTEST_RESULT_FAIL;
+       }
+       err = test_extbbslist_appenditem(editctx, input, input_len);
+       if (err < 0) {
+               result = UNITTEST_RESULT_FAIL;
+       }
+       extbbslist_editcontext_deleteitem(editctx, 2);
+       extbbslist_endedit(list, editctx, True);
+
+       num = extbbslist_number(list);
+       if (num != 3) {
+               printf("extbbslist_number 002\n");
+               result = UNITTEST_RESULT_FAIL;
+       }
+
+       extbbslist_delete(list);
+
+       return result;
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_swap_common(testextbbslist_input_t *input, W input_len, W i0, W i1, testextbbslist_expected_t *expected, W expected_len)
+{
+       extbbslist_t *list;
+       extbbslist_editcontext_t *editctx;
+       UNITTEST_RESULT result = UNITTEST_RESULT_PASS;
+       W err;
+
+       list = extbbslist_new(NULL, 0, 0);
+
+       editctx = extbbslist_startedit(list);
+       if (editctx == NULL) {
+               printf("extbbslist_startedit\n");
+               extbbslist_delete(list);
+               return UNITTEST_RESULT_FAIL;
+       }
+       err = test_extbbslist_appenditem(editctx, input, input_len);
+       if (err < 0) {
+               result = UNITTEST_RESULT_FAIL;
+       }
+       extbbslist_editcontext_swapitem(editctx, i0, i1);
+       extbbslist_endedit(list, editctx, True);
+
+       err = test_extbbslist_checkexpected(list, expected, expected_len);
+       if (err < 0) {
+               result = UNITTEST_RESULT_FAIL;
+       }
+
+       extbbslist_delete(list);
+
+       return result;
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_9()
+{
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+       testextbbslist_expected_t expected[] = {
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testurl006,
+                       strlen(test_extbbslist_testurl006)
+               },
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testurl005,
+                       strlen(test_extbbslist_testurl005)
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testurl007,
+                       strlen(test_extbbslist_testurl007)
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testurl008,
+                       strlen(test_extbbslist_testurl008)
+               },
+       };
+       W expected_len = sizeof(expected)/sizeof(testextbbslist_expected_t);
+
+       return test_extbbslist_swap_common(input, input_len, 0, 1, expected, expected_len);
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_10()
+{
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+       testextbbslist_expected_t expected[] = {
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testurl007,
+                       strlen(test_extbbslist_testurl007)
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testurl006,
+                       strlen(test_extbbslist_testurl006)
+               },
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testurl005,
+                       strlen(test_extbbslist_testurl005)
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testurl008,
+                       strlen(test_extbbslist_testurl008)
+               },
+       };
+       W expected_len = sizeof(expected)/sizeof(testextbbslist_expected_t);
+
+       return test_extbbslist_swap_common(input, input_len, 0, 2, expected, expected_len);
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_11()
+{
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+       testextbbslist_expected_t expected[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testurl005,
+                       strlen(test_extbbslist_testurl005)
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testurl008,
+                       strlen(test_extbbslist_testurl008)
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testurl007,
+                       strlen(test_extbbslist_testurl007)
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testurl006,
+                       strlen(test_extbbslist_testurl006)
+               },
+       };
+       W expected_len = sizeof(expected)/sizeof(testextbbslist_expected_t);
+
+       return test_extbbslist_swap_common(input, input_len, 1, 3, expected, expected_len);
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_12()
+{
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+       testextbbslist_expected_t expected[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testurl005,
+                       strlen(test_extbbslist_testurl005)
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testurl006,
+                       strlen(test_extbbslist_testurl006)
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testurl008,
+                       strlen(test_extbbslist_testurl008)
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testurl007,
+                       strlen(test_extbbslist_testurl007)
+               },
+       };
+       W expected_len = sizeof(expected)/sizeof(testextbbslist_expected_t);
+
+       return test_extbbslist_swap_common(input, input_len, 2, 3, expected, expected_len);
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_13()
+{
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+       testextbbslist_expected_t expected[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testurl005,
+                       strlen(test_extbbslist_testurl005)
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testurl006,
+                       strlen(test_extbbslist_testurl006)
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testurl007,
+                       strlen(test_extbbslist_testurl007)
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testurl008,
+                       strlen(test_extbbslist_testurl008)
+               },
+       };
+       W expected_len = sizeof(expected)/sizeof(testextbbslist_expected_t);
+
+       return test_extbbslist_swap_common(input, input_len, 0, 4, expected, expected_len);
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_14()
+{
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+       testextbbslist_expected_t expected[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testurl005,
+                       strlen(test_extbbslist_testurl005)
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testurl006,
+                       strlen(test_extbbslist_testurl006)
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testurl007,
+                       strlen(test_extbbslist_testurl007)
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testurl008,
+                       strlen(test_extbbslist_testurl008)
+               },
+       };
+       W expected_len = sizeof(expected)/sizeof(testextbbslist_expected_t);
+
+       return test_extbbslist_swap_common(input, input_len, 4, 0, expected, expected_len);
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_15()
+{
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+       testextbbslist_expected_t expected[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testurl005,
+                       strlen(test_extbbslist_testurl005)
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testurl006,
+                       strlen(test_extbbslist_testurl006)
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testurl007,
+                       strlen(test_extbbslist_testurl007)
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testurl008,
+                       strlen(test_extbbslist_testurl008)
+               },
+       };
+       W expected_len = sizeof(expected)/sizeof(testextbbslist_expected_t);
+
+       return test_extbbslist_swap_common(input, input_len, -1, 0, expected, expected_len);
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_16()
+{
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+       testextbbslist_expected_t expected[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testurl005,
+                       strlen(test_extbbslist_testurl005)
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testurl006,
+                       strlen(test_extbbslist_testurl006)
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testurl007,
+                       strlen(test_extbbslist_testurl007)
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testurl008,
+                       strlen(test_extbbslist_testurl008)
+               },
+       };
+       W expected_len = sizeof(expected)/sizeof(testextbbslist_expected_t);
+
+       return test_extbbslist_swap_common(input, input_len, 0, -1, expected, expected_len);
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_swap_selected_common(testextbbslist_input_t *input, W input_len, W sel_before, W i0, W i1, W sel_expected)
+{
+       extbbslist_t *list;
+       extbbslist_editcontext_t *editctx;
+       UNITTEST_RESULT result = UNITTEST_RESULT_PASS;
+       W sel, err;
+
+       list = extbbslist_new(NULL, 0, 0);
+
+       editctx = extbbslist_startedit(list);
+       if (editctx == NULL) {
+               printf("extbbslist_startedit\n");
+               extbbslist_delete(list);
+               return UNITTEST_RESULT_FAIL;
+       }
+
+       err = test_extbbslist_appenditem(editctx, input, input_len);
+       if (err < 0) {
+               result = UNITTEST_RESULT_FAIL;
+       }
+       extbbslist_editcontext_setselect(editctx, sel_before);
+       extbbslist_editcontext_swapitem(editctx, i0, i1);
+
+       sel = extbbslist_editcontext_getselect(editctx);
+       if (sel != sel_expected) {
+               printf("extbbslist_editcontext_getselected fail: expected = %d, result = %d\n", sel_expected, sel);
+               result = UNITTEST_RESULT_FAIL;
+       }
+
+       extbbslist_endedit(list, editctx, True);
+
+       extbbslist_delete(list);
+
+       return result;
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_17()
+{
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+
+       return test_extbbslist_swap_selected_common(input, input_len, 0, 0, 1, 1);
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_18()
+{
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+
+       return test_extbbslist_swap_selected_common(input, input_len, 1, 0, 1, 0);
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_19()
+{
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+
+       return test_extbbslist_swap_selected_common(input, input_len, 0, 0, 2, 2);
+}
+
+LOCAL UNITTEST_RESULT test_extbbslist_20()
+{
+       testextbbslist_input_t input[] = {
+               {
+                       test_extbbslist_testtitle001,
+                       tc_strlen(test_extbbslist_testtitle001),
+                       test_extbbslist_testTCurl005,
+                       tc_strlen(test_extbbslist_testTCurl005),
+               },
+               {
+                       test_extbbslist_testtitle002,
+                       tc_strlen(test_extbbslist_testtitle002),
+                       test_extbbslist_testTCurl006,
+                       tc_strlen(test_extbbslist_testTCurl006),
+               },
+               {
+                       test_extbbslist_testtitle003,
+                       tc_strlen(test_extbbslist_testtitle003),
+                       test_extbbslist_testTCurl007,
+                       tc_strlen(test_extbbslist_testTCurl007),
+               },
+               {
+                       test_extbbslist_testtitle004,
+                       tc_strlen(test_extbbslist_testtitle004),
+                       test_extbbslist_testTCurl008,
+                       tc_strlen(test_extbbslist_testTCurl008),
+               },
+       };
+       W input_len = sizeof(input)/sizeof(testextbbslist_input_t);
+
+       return test_extbbslist_swap_selected_common(input, input_len, 0, 0, 4, 0);
+}
+
 EXPORT VOID test_extbbslist_main(unittest_driver_t *driver)
 {
        UNITTEST_DRIVER_REGIST(driver, test_extbbslist_1);
        UNITTEST_DRIVER_REGIST(driver, test_extbbslist_2);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_3);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_4);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_5);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_6);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_7);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_8);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_9);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_10);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_11);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_12);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_13);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_14);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_15);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_16);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_17);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_18);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_19);
+       UNITTEST_DRIVER_REGIST(driver, test_extbbslist_20);
 }