Changeset 3838


Ignore:
Timestamp:
Feb 25, 2015, 11:09:50 PM (7 years ago)
Author:
guite
Message:

map: adding test for random failure with add/remove updates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/t/base/map.cpp

    r3834 r3838  
    108108        m.remove(10);
    109109        lolunit_assert_equal(m[8], 8);
     110    }
     111
     112    lolunit_declare_test(MapRandomAddRemove)
     113    {
     114        map<unsigned char, unsigned char> m;
     115
     116        unsigned char a = 1, b = 1, c = 1;
     117
     118        char presence[256];
     119        char value[256];
     120
     121        for (int i = 0 ; i < 256 ; ++i)
     122        {
     123            presence[i] = 0;
     124        }
     125
     126        for (int i = 0 ; i < 10000 ; ++i)
     127        {
     128            m[a] = b;
     129            m.remove(b);
     130
     131            presence[a] = 1;
     132            value[a] = b;
     133            presence[b] = 0;
     134
     135            a = a * b + c;
     136            b = b * c + a;
     137            c = c * a + b;
     138
     139            // debug output
     140            // std::cout << "a " << (int)a << ", b " << (int)b  << std::endl;
     141
     142            for (int j = 0 ; j < 256 ; ++j)
     143            {
     144                unsigned char v;
     145                if (presence[j])
     146                {
     147                    lolunit_assert(m.try_get(j, v));
     148                    lolunit_assert_equal((int) value[j], (int) v);
     149                }
     150                else
     151                {
     152                    lolunit_assert(!m.try_get(j, v));
     153                }
     154            }
     155        }
    110156    }
    111157
Note: See TracChangeset for help on using the changeset viewer.