Blame nss/cmd/libpkix/pkix/util/test_list2.c

Packit 40b132
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit 40b132
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit 40b132
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit 40b132
/*
Packit 40b132
 * test_list2.c
Packit 40b132
 *
Packit 40b132
 * Performs an in-place sort on a list
Packit 40b132
 *
Packit 40b132
 */
Packit 40b132
Packit 40b132
#include "testutil.h"
Packit 40b132
#include "testutil_nss.h"
Packit 40b132
Packit 40b132
static void *plContext = NULL;
Packit 40b132
Packit 40b132
int test_list2(int argc, char *argv[]) {
Packit 40b132
Packit 40b132
        PKIX_List *list;
Packit 40b132
        char *temp;
Packit 40b132
        PKIX_UInt32 i = 0;
Packit 40b132
        PKIX_UInt32 j = 0;
Packit 40b132
        PKIX_Int32 cmpResult;
Packit 40b132
        PKIX_PL_OID *testOID;
Packit 40b132
        PKIX_PL_String *testString;
Packit 40b132
        PKIX_PL_Object *obj, *obj2;
Packit 40b132
        PKIX_UInt32 size = 10;
Packit 40b132
        char *testOIDString[10] = {
Packit 40b132
                "2.9.999.1.20",
Packit 40b132
                "1.2.3.4.5.6.7",
Packit 40b132
                "0.1",
Packit 40b132
                "1.2.3.5",
Packit 40b132
                "0.39",
Packit 40b132
                "1.2.3.4.7",
Packit 40b132
                "1.2.3.4.6",
Packit 40b132
                "0.39.1",
Packit 40b132
                "1.2.3.4.5",
Packit 40b132
                "0.39.1.300"
Packit 40b132
        };
Packit 40b132
        PKIX_UInt32 actualMinorVersion;
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        startTests("List Sorting");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(
Packit 40b132
            PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext));
Packit 40b132
Packit 40b132
        subTest("Creating Unsorted Lists");
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&list, plContext));
Packit 40b132
        for (i = 0; i < size; i++) {
Packit 40b132
                /* Create a new OID object */
Packit 40b132
                PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_OID_Create(
Packit 40b132
                                                testOIDString[i],
Packit 40b132
                                                &testOID,
Packit 40b132
                                                plContext));
Packit 40b132
                /* Insert it into the list */
Packit 40b132
                PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem
Packit 40b132
                            (list, (PKIX_PL_Object*)testOID, plContext));
Packit 40b132
                /* Decref the string object */
Packit 40b132
                PKIX_TEST_DECREF_BC(testOID);
Packit 40b132
        }
Packit 40b132
Packit 40b132
        subTest("Outputting Unsorted List");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object*)list,
Packit 40b132
                                            &testString,
Packit 40b132
                                            plContext));
Packit 40b132
        temp = PKIX_String2ASCII(testString, plContext);
Packit 40b132
        if (temp){
Packit 40b132
                (void) printf("%s \n", temp);
Packit 40b132
                PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext));
Packit 40b132
        }
Packit 40b132
        PKIX_TEST_DECREF_BC(testString);
Packit 40b132
Packit 40b132
        subTest("Performing Bubble Sort");
Packit 40b132
Packit 40b132
        for (i = 0; i < size; i++)
Packit 40b132
                for (j = 9; j > i; j--) {
Packit 40b132
                        PKIX_TEST_EXPECT_NO_ERROR
Packit 40b132
                                (PKIX_List_GetItem(list, j, &obj, plContext));
Packit 40b132
                        PKIX_TEST_EXPECT_NO_ERROR
Packit 40b132
                                (PKIX_List_GetItem
Packit 40b132
                                (list, j-1, &obj2, plContext));
Packit 40b132
Packit 40b132
                        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Compare
Packit 40b132
                                    (obj, obj2, &cmpResult, plContext));
Packit 40b132
                        if (cmpResult < 0) {
Packit 40b132
                                /* Exchange the items */
Packit 40b132
                                PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_SetItem
Packit 40b132
                                            (list, j, obj2, plContext));
Packit 40b132
                                PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_SetItem
Packit 40b132
                                            (list, j-1, obj, plContext));
Packit 40b132
                        }
Packit 40b132
                        /* DecRef objects */
Packit 40b132
                        PKIX_TEST_DECREF_BC(obj);
Packit 40b132
                        PKIX_TEST_DECREF_BC(obj2);
Packit 40b132
                }
Packit 40b132
Packit 40b132
        subTest("Outputting Sorted List");
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object*)list,
Packit 40b132
                                            &testString,
Packit 40b132
                                            plContext));
Packit 40b132
        temp = PKIX_String2ASCII(testString, plContext);
Packit 40b132
        if (temp){
Packit 40b132
                (void) printf("%s \n", temp);
Packit 40b132
                PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext));
Packit 40b132
        }
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_TEST_DECREF_AC(testString);
Packit 40b132
        PKIX_TEST_DECREF_AC(list);
Packit 40b132
Packit 40b132
        PKIX_Shutdown(plContext);
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
Packit 40b132
        endTests("List Sorting");
Packit 40b132
Packit 40b132
        return (0);
Packit 40b132
}