Changeset 1bc545c8942b47e034f824644b4834a991178afc

Show
Ignore:
Timestamp:
05/01/08 06:49:56 (8 months ago)
Author:
krayouva <krayouva@…>
Parents:
75ff31607066f7bcb0b471c3652443662c0f985f
Children:
d0c804297259976d08303935ebc0332aec812118
git-committer:
krayouva <krayouva@gmail.com> / 2008-04-30T16:49:56Z-0400
Message:

* Added unit tests to new bit counting routines

- Also, the builtin routines aren't defined when the input is 0,

so added special casing in that case.

Location:
c
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • c/include/global.h

    r75ff31 r1bc545  
    139139{ 
    140140#ifdef __GNUC__ 
    141     return __builtin_clz(word); 
     141    if (word) 
     142        return __builtin_clz(word); 
     143    return 32; 
    142144#else 
    143145    static const int count_leading_zeros[] = { 
     
    180182{ 
    181183#ifdef __GNUC__ 
    182     return __builtin_ctz(word); 
     184    if (word) 
     185        return __builtin_ctz(word); 
     186    return 32; 
    183187#else 
    184188    static const int count_trailing_zeros[] = { 
  • c/test/test_global.c

    r48290f r1bc545  
    8484} 
    8585 
     86static void test_count_leading_zeros(TestCase *tc, void *data) 
     87{ 
     88    (void)data; 
     89    Aiequal(32, frt_count_leading_zeros(0)); 
     90    Aiequal(31, frt_count_leading_zeros(1)); 
     91    Aiequal(30, frt_count_leading_zeros(2)); 
     92    Aiequal(30, frt_count_leading_zeros(3)); 
     93    Aiequal( 0, frt_count_leading_zeros(0xffffffff)); 
     94} 
     95 
     96static void test_count_leading_ones(TestCase *tc, void *data) 
     97{ 
     98    (void)data; 
     99    Aiequal( 0, frt_count_leading_ones(0)); 
     100    Aiequal( 0, frt_count_leading_ones(1)); 
     101    Aiequal( 0, frt_count_leading_ones(2)); 
     102    Aiequal( 0, frt_count_leading_ones(3)); 
     103    Aiequal(32, frt_count_leading_ones(0xffffffff)); 
     104} 
     105 
     106static void test_count_trailing_zeros(TestCase *tc, void *data) 
     107{ 
     108    (void)data; 
     109    Aiequal(32, frt_count_trailing_zeros(0)); 
     110    Aiequal( 0, frt_count_trailing_zeros(1)); 
     111    Aiequal( 1, frt_count_trailing_zeros(2)); 
     112    Aiequal( 0, frt_count_trailing_zeros(3)); 
     113    Aiequal( 4, frt_count_trailing_zeros(0xfffffff0)); 
     114    Aiequal( 0, frt_count_trailing_zeros(0xffffffff)); 
     115} 
     116 
     117static void test_count_trailing_ones(TestCase *tc, void *data) 
     118{ 
     119    (void)data; 
     120    Aiequal( 0, frt_count_trailing_ones(0)); 
     121    Aiequal( 1, frt_count_trailing_ones(1)); 
     122    Aiequal( 0, frt_count_trailing_ones(2)); 
     123    Aiequal( 2, frt_count_trailing_ones(3)); 
     124    Aiequal( 0, frt_count_trailing_ones(0xfffffff0)); 
     125    Aiequal(32, frt_count_trailing_ones(0xffffffff)); 
     126} 
     127 
     128static void test_count_zeros(TestCase *tc, void *data) 
     129{ 
     130    (void)data; 
     131    Aiequal(32, frt_count_zeros(0)); 
     132    Aiequal(31, frt_count_zeros(1)); 
     133    Aiequal(31, frt_count_zeros(2)); 
     134    Aiequal(30, frt_count_zeros(3)); 
     135    Aiequal( 4, frt_count_zeros(0xfffffff0)); 
     136    Aiequal( 0, frt_count_zeros(0xffffffff)); 
     137} 
     138 
     139static void test_count_ones(TestCase *tc, void *data) 
     140{ 
     141    (void)data; 
     142    Aiequal( 0, frt_count_ones(0)); 
     143    Aiequal( 1, frt_count_ones(1)); 
     144    Aiequal( 1, frt_count_ones(2)); 
     145    Aiequal( 2, frt_count_ones(3)); 
     146    Aiequal(28, frt_count_ones(0xfffffff0)); 
     147    Aiequal(32, frt_count_ones(0xffffffff)); 
     148} 
     149 
     150static void test_round2(TestCase *tc, void *data) 
     151{ 
     152    (void)data; 
     153    Aiequal(   1, frt_round2(0)); 
     154    Aiequal(   2, frt_round2(1)); 
     155    Aiequal(   4, frt_round2(2)); 
     156    Aiequal(   4, frt_round2(3)); 
     157    Aiequal(1024, frt_round2(1023)); 
     158    Aiequal(2048, frt_round2(1024)); 
     159} 
    86160 
    87161TestSuite *ts_global(TestSuite *suite) 
     
    92166    tst_run_test(suite, test_stacktrace, NULL); 
    93167    tst_run_test(suite, test_sighandler, NULL); 
    94  
     168    tst_run_test(suite, test_count_leading_zeros, NULL); 
     169    tst_run_test(suite, test_count_leading_ones, NULL); 
     170    tst_run_test(suite, test_count_trailing_zeros, NULL); 
     171    tst_run_test(suite, test_count_trailing_ones, NULL); 
     172    tst_run_test(suite, test_count_zeros, NULL); 
     173    tst_run_test(suite, test_count_ones, NULL); 
     174    tst_run_test(suite, test_round2, NULL); 
    95175    return suite; 
    96176}