LCOV - code coverage report
Current view: top level - src/test - test_Sort.c (source / functions) Hit Total Coverage
Test: LAGraph code coverage report. Commit id: 7b9d2ee. Current time (UTC): 2025-06-03T21:57:17Z Lines: 142 142 100.0 %
Date: 2025-06-03 22:02:40 Functions: 6 6 100.0 %

          Line data    Source code
       1             : //-----------------------------------------------------------------------------
       2             : // LAGraph/src/test/test_Sort.c: test LG_msort* methods
       3             : //-----------------------------------------------------------------------------
       4             : 
       5             : // LAGraph, (c) 2019-2022 by The LAGraph Contributors, All Rights Reserved.
       6             : // SPDX-License-Identifier: BSD-2-Clause
       7             : //
       8             : // For additional details (including references to third party source code and
       9             : // other files) see the LICENSE file or contact permission@sei.cmu.edu. See
      10             : // Contributors.txt for a full list of contributors. Created, in part, with
      11             : // funding and support from the U.S. Government (see Acknowledgments.txt file).
      12             : // DM22-0790
      13             : 
      14             : // Contributed by Timothy A. Davis, Texas A&M University
      15             : 
      16             : //-----------------------------------------------------------------------------
      17             : 
      18             : #include "LAGraph_test.h"
      19             : #include "LG_internal.h"
      20             : 
      21             : char msg [LAGRAPH_MSG_LEN] ;
      22             : 
      23             : //-----------------------------------------------------------------------------
      24             : // test_sort1
      25             : //-----------------------------------------------------------------------------
      26             : 
      27           1 : void test_sort1 (void)
      28             : {
      29           1 :     OK (LAGraph_Init (msg)) ;
      30           1 :     OK (LAGraph_SetNumThreads (1, 4, msg)) ;
      31             : 
      32           3 :     for (int trial = 0 ; trial <= 1 ; trial++)
      33             :     {
      34           2 :         int64_t n = (trial == 0) ? 1024 : (256 * 1024) ;
      35             : 
      36             :         int64_t *A0 ;
      37           2 :         OK (LAGraph_Malloc ((void **) &A0, n, sizeof (int64_t), msg)) ;
      38             : 
      39           2 :         uint64_t seed = 1 ;
      40      263170 :         for (int k = 0 ; k < n ; k++)
      41             :         {
      42      263168 :             A0 [k] = (int64_t) (LG_Random64 (&seed) & 0x7FFF) ;
      43             :         }
      44             : 
      45           2 :         OK (LG_msort1 (A0, n, msg)) ;
      46             : 
      47      263168 :         for (int k = 1 ; k < n ; k++)
      48             :         {
      49      263166 :             TEST_CHECK (A0 [k-1] <= A0 [k]) ;
      50             :         }
      51             : 
      52      263170 :         for (int k = 0 ; k < n ; k++)
      53             :         {
      54      263168 :             A0 [k] = (int64_t) (LG_Random64 (&seed) % 4) ;
      55             :         }
      56             : 
      57           2 :         OK (LG_msort1 (A0, n, msg)) ;
      58             : 
      59      263168 :         for (int k = 1 ; k < n ; k++)
      60             :         {
      61      263166 :             TEST_CHECK (A0 [k-1] <= A0 [k]) ;
      62             :         }
      63             : 
      64           2 :         LAGraph_Free ((void **) &A0, NULL) ;
      65             :     }
      66             : 
      67           1 :     OK (LAGraph_Finalize (msg)) ;
      68           1 : }
      69             : 
      70             : //-----------------------------------------------------------------------------
      71             : // test_sort2
      72             : //-----------------------------------------------------------------------------
      73             : 
      74           1 : void test_sort2 (void)
      75             : {
      76           1 :     OK (LAGraph_Init (msg)) ;
      77           1 :     OK (LAGraph_SetNumThreads (1, 4, msg)) ;
      78             : 
      79           1 :     int64_t n = 256 * 1024 ;
      80             : 
      81             :     int64_t *A0, *A1 ;
      82           1 :     OK (LAGraph_Malloc ((void **) &A0, n, sizeof (int64_t), msg)) ;
      83           1 :     OK (LAGraph_Malloc ((void **) &A1, n, sizeof (int64_t), msg)) ;
      84             : 
      85           1 :     uint64_t seed = 1 ;
      86      262145 :     for (int k = 0 ; k < n ; k++)
      87             :     {
      88      262144 :         A0 [k] = (int64_t) (LG_Random64 (&seed) & 0x7FFF) ;
      89      262144 :         A1 [k] = (int64_t) LG_Random64 (&seed) ;
      90             :     }
      91             : 
      92           1 :     OK (LG_msort2 (A0, A1, n, msg)) ;
      93             : 
      94      262144 :     for (int k = 1 ; k < n ; k++)
      95             :     {
      96      262143 :         TEST_CHECK (LG_lt_2 (A0, A1, k-1, A0, A1, k)
      97             :             || (A0 [k-1] == A0 [k] && A1 [k-1] == A1 [k])) ;
      98             :     }
      99             : 
     100      262145 :     for (int k = 0 ; k < n ; k++)
     101             :     {
     102      262144 :         A0 [k] = 0 ;
     103      262144 :         A1 [k] = (int64_t) (LG_Random64 (&seed) % 4) ;
     104             :     }
     105             : 
     106           1 :     OK (LG_msort2 (A0, A1, n, msg)) ;
     107             : 
     108      262144 :     for (int k = 1 ; k < n ; k++)
     109             :     {
     110      262143 :         TEST_CHECK (LG_lt_2 (A0, A1, k-1, A0, A1, k)
     111             :             || (A0 [k-1] == A0 [k] && A1 [k-1] == A1 [k])) ;
     112             :     }
     113             : 
     114           1 :     LAGraph_Free ((void **) &A0, NULL) ;
     115           1 :     LAGraph_Free ((void **) &A1, NULL) ;
     116             : 
     117           1 :     OK (LAGraph_Finalize (msg)) ;
     118           1 : }
     119             : 
     120             : //-----------------------------------------------------------------------------
     121             : // test_sort3
     122             : //-----------------------------------------------------------------------------
     123             : 
     124           1 : void test_sort3 (void)
     125             : {
     126           1 :     OK (LAGraph_Init (msg)) ;
     127           1 :     OK (LAGraph_SetNumThreads (1, 4, msg)) ;
     128             : 
     129           1 :     int64_t n = 256 * 1024 ;
     130           1 :     printf ("test sort3\n") ;
     131             : 
     132             :     int64_t *A0, *A1, *A2 ;
     133           1 :     OK (LAGraph_Malloc ((void **) &A0, n, sizeof (int64_t), msg)) ;
     134           1 :     OK (LAGraph_Malloc ((void **) &A1, n, sizeof (int64_t), msg)) ;
     135           1 :     OK (LAGraph_Malloc ((void **) &A2, n, sizeof (int64_t), msg)) ;
     136             : 
     137           1 :     uint64_t seed = 9 ;
     138             : 
     139      262145 :     for (int k = 0 ; k < n ; k++)
     140             :     {
     141      262144 :         A0 [k] = (int64_t) (LG_Random64 (&seed) & 0x7FFF) ;
     142      262144 :         A1 [k] = (int64_t) LG_Random64 (&seed) ;
     143      262144 :         A2 [k] = (int64_t) LG_Random64 (&seed) ;
     144             :     }
     145             : 
     146           1 :     OK (LG_msort3 (A0, A1, A2, n, msg)) ;
     147             : 
     148      262144 :     for (int k = 1 ; k < n ; k++)
     149             :     {
     150      262143 :         TEST_CHECK (LG_lt_3 (A0, A1, A2, k-1, A0, A1, A2, k)
     151             :             || (A0 [k-1] == A0 [k] &&
     152             :                 A1 [k-1] == A1 [k] &&
     153             :                 A2 [k-1] == A2 [k])) ;
     154             :     }
     155             : 
     156      262145 :     for (int k = 0 ; k < n ; k++)
     157             :     {
     158      262144 :         A0 [k] = 0 ;
     159      262144 :         A1 [k] = (int64_t) (LG_Random64 (&seed) % 4) ;
     160      262144 :         A2 [k] = (int64_t) (LG_Random64 (&seed) % 4) ;
     161             :     }
     162             : 
     163           1 :     OK (LG_msort3 (A0, A1, A2, n, msg)) ;
     164             : 
     165      262144 :     for (int k = 1 ; k < n ; k++)
     166             :     {
     167      262143 :         TEST_CHECK (LG_lt_3 (A0, A1, A2, k-1, A0, A1, A2, k)
     168             :             || (A0 [k-1] == A0 [k] &&
     169             :                 A1 [k-1] == A1 [k] &&
     170             :                 A2 [k-1] == A2 [k])) ;
     171             :     }
     172             : 
     173           1 :     LAGraph_Free ((void **) &A0, NULL) ;
     174           1 :     LAGraph_Free ((void **) &A1, NULL) ;
     175           1 :     LAGraph_Free ((void **) &A2, NULL) ;
     176             : 
     177           1 :     OK (LAGraph_Finalize (msg)) ;
     178           1 : }
     179             : 
     180             : //-----------------------------------------------------------------------------
     181             : // test_sort1_brutal
     182             : //-----------------------------------------------------------------------------
     183             : 
     184             : #if LG_BRUTAL_TESTS
     185           1 : void test_sort1_brutal (void)
     186             : {
     187           1 :     OK (LG_brutal_setup (msg)) ;
     188           1 :     OK (LAGraph_SetNumThreads (1, 4, msg)) ;
     189             : 
     190           3 :     for (int trial = 0 ; trial <= 1 ; trial++)
     191             :     {
     192           2 :         int64_t n = (trial == 0) ? 1024 : (256 * 1024) ;
     193             : 
     194             :         int64_t *A0 ;
     195           2 :         OK (LAGraph_Malloc ((void **) &A0, n, sizeof (int64_t), msg)) ;
     196             : 
     197           2 :         uint64_t seed = 1 ;
     198      263170 :         for (int k = 0 ; k < n ; k++)
     199             :         {
     200      263168 :             A0 [k] = (int64_t) (LG_Random64 (&seed) & 0x7FFF) ;
     201             :         }
     202             : 
     203           3 :         LG_BRUTAL (LG_msort1 (A0, n, msg)) ;
     204             : 
     205      263168 :         for (int k = 1 ; k < n ; k++)
     206             :         {
     207      263166 :             TEST_CHECK (A0 [k-1] <= A0 [k]) ;
     208             :         }
     209             : 
     210      263170 :         for (int k = 0 ; k < n ; k++)
     211             :         {
     212      263168 :             A0 [k] = (int64_t) (LG_Random64 (&seed) % 4) ;
     213             :         }
     214             : 
     215           3 :         LG_BRUTAL (LG_msort1 (A0, n, msg)) ;
     216             : 
     217      263168 :         for (int k = 1 ; k < n ; k++)
     218             :         {
     219      263166 :             TEST_CHECK (A0 [k-1] <= A0 [k]) ;
     220             :         }
     221             : 
     222           2 :         LAGraph_Free ((void **) &A0, NULL) ;
     223             :     }
     224             : 
     225           1 :     OK (LG_brutal_teardown (msg)) ;
     226           1 : }
     227             : #endif
     228             : 
     229             : //-----------------------------------------------------------------------------
     230             : // test_sort2_brutal
     231             : //-----------------------------------------------------------------------------
     232             : 
     233             : #if LG_BRUTAL_TESTS
     234           1 : void test_sort2_brutal (void)
     235             : {
     236           1 :     OK (LG_brutal_setup (msg)) ;
     237           1 :     OK (LAGraph_SetNumThreads (1, 4, msg)) ;
     238             : 
     239           1 :     int64_t n = 256 * 1024 ;
     240             : 
     241             :     int64_t *A0, *A1 ;
     242           1 :     OK (LAGraph_Malloc ((void **) &A0, n, sizeof (int64_t), msg)) ;
     243           1 :     OK (LAGraph_Malloc ((void **) &A1, n, sizeof (int64_t), msg)) ;
     244             : 
     245           1 :     uint64_t seed = 1 ;
     246      262145 :     for (int k = 0 ; k < n ; k++)
     247             :     {
     248      262144 :         A0 [k] = (int64_t) (LG_Random64 (&seed) & 0x7FFF) ;
     249      262144 :         A1 [k] = (int64_t) LG_Random64 (&seed) ;
     250             :     }
     251             : 
     252           2 :     LG_BRUTAL (LG_msort2 (A0, A1, n, msg)) ;
     253             : 
     254      262144 :     for (int k = 1 ; k < n ; k++)
     255             :     {
     256      262143 :         TEST_CHECK (LG_lt_2 (A0, A1, k-1, A0, A1, k)
     257             :             || (A0 [k-1] == A0 [k] && A1 [k-1] == A1 [k])) ;
     258             :     }
     259             : 
     260      262145 :     for (int k = 0 ; k < n ; k++)
     261             :     {
     262      262144 :         A0 [k] = 0 ;
     263      262144 :         A1 [k] = (int64_t) (LG_Random64 (&seed) % 4) ;
     264             :     }
     265             : 
     266           2 :     LG_BRUTAL (LG_msort2 (A0, A1, n, msg)) ;
     267             : 
     268      262144 :     for (int k = 1 ; k < n ; k++)
     269             :     {
     270      262143 :         TEST_CHECK (LG_lt_2 (A0, A1, k-1, A0, A1, k)
     271             :             || (A0 [k-1] == A0 [k] && A1 [k-1] == A1 [k])) ;
     272             :     }
     273             : 
     274           1 :     LAGraph_Free ((void **) &A0, NULL) ;
     275           1 :     LAGraph_Free ((void **) &A1, NULL) ;
     276             : 
     277           1 :     OK (LG_brutal_teardown (msg)) ;
     278           1 : }
     279             : #endif
     280             : 
     281             : //-----------------------------------------------------------------------------
     282             : // test_sort3_brutal
     283             : //-----------------------------------------------------------------------------
     284             : 
     285             : #if LG_BRUTAL_TESTS
     286           1 : void test_sort3_brutal (void)
     287             : {
     288           1 :     OK (LG_brutal_setup (msg)) ;
     289           1 :     OK (LAGraph_SetNumThreads (1, 4, msg)) ;
     290             : 
     291           1 :     int64_t n = 256 * 1024 ;
     292           1 :     printf ("test sort3\n") ;
     293             : 
     294             :     int64_t *A0, *A1, *A2 ;
     295           1 :     OK (LAGraph_Malloc ((void **) &A0, n, sizeof (int64_t), msg)) ;
     296           1 :     OK (LAGraph_Malloc ((void **) &A1, n, sizeof (int64_t), msg)) ;
     297           1 :     OK (LAGraph_Malloc ((void **) &A2, n, sizeof (int64_t), msg)) ;
     298             : 
     299           1 :     uint64_t seed = 1 ;
     300      262145 :     for (int k = 0 ; k < n ; k++)
     301             :     {
     302      262144 :         A0 [k] = (int64_t) (LG_Random64 (&seed) & 0x7FFF) ;
     303      262144 :         A1 [k] = (int64_t) LG_Random64 (&seed) ;
     304      262144 :         A2 [k] = (int64_t) LG_Random64 (&seed) ;
     305             :     }
     306             : 
     307           2 :     LG_BRUTAL (LG_msort3 (A0, A1, A2, n, msg)) ;
     308             : 
     309      262144 :     for (int k = 1 ; k < n ; k++)
     310             :     {
     311      262143 :         TEST_CHECK (LG_lt_3 (A0, A1, A2, k-1, A0, A1, A2, k)
     312             :             || (A0 [k-1] == A0 [k] &&
     313             :                 A1 [k-1] == A1 [k] &&
     314             :                 A2 [k-1] == A2 [k])) ;
     315             :     }
     316             : 
     317      262145 :     for (int k = 0 ; k < n ; k++)
     318             :     {
     319      262144 :         A0 [k] = 0 ;
     320      262144 :         A1 [k] = (int64_t) (LG_Random64 (&seed) % 4) ;
     321      262144 :         A2 [k] = (int64_t) (LG_Random64 (&seed) % 4) ;
     322             :     }
     323             : 
     324           2 :     LG_BRUTAL (LG_msort3 (A0, A1, A2, n, msg)) ;
     325             : 
     326      262144 :     for (int k = 1 ; k < n ; k++)
     327             :     {
     328      262143 :         TEST_CHECK (LG_lt_3 (A0, A1, A2, k-1, A0, A1, A2, k)
     329             :             || (A0 [k-1] == A0 [k] &&
     330             :                 A1 [k-1] == A1 [k] &&
     331             :                 A2 [k-1] == A2 [k])) ;
     332             :     }
     333             : 
     334           1 :     LAGraph_Free ((void **) &A0, NULL) ;
     335           1 :     LAGraph_Free ((void **) &A1, NULL) ;
     336           1 :     LAGraph_Free ((void **) &A2, NULL) ;
     337             : 
     338           1 :     OK (LG_brutal_teardown (msg)) ;
     339           1 : }
     340             : #endif
     341             : 
     342             : 
     343             : //-----------------------------------------------------------------------------
     344             : // TEST_LIST: the list of tasks for this entire test
     345             : //-----------------------------------------------------------------------------
     346             : 
     347             : TEST_LIST = {
     348             :     {"test_sort1", test_sort1},
     349             :     {"test_sort2", test_sort2},
     350             :     {"test_sort3", test_sort3},
     351             :     #if LG_BRUTAL_TESTS
     352             :     {"test_sort1_brutal", test_sort1_brutal},
     353             :     {"test_sort2_brutal", test_sort2_brutal},
     354             :     {"test_sort3_brutal", test_sort3_brutal},
     355             :     #endif
     356             :     {NULL, NULL}
     357             : };

Generated by: LCOV version 1.14