From: Tor Didriksen Date: January 14 2011 12:38pm Subject: bzr commit into mysql-trunk branch (tor.didriksen:3365) List-Archive: http://lists.mysql.com/commits/128735 Message-Id: <20110114123844.0D0C33784@atum07.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1621458171393933382==" --===============1621458171393933382== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/didrik/repo/next-mr-gtest-bitmap/ based on revid:tor.didriksen@stripped 3365 Tor Didriksen 2011-01-14 add unit test for bitmap added: unittest/gunit/my_bitmap-t.cc modified: unittest/gunit/CMakeLists.txt === modified file 'unittest/gunit/CMakeLists.txt' --- a/unittest/gunit/CMakeLists.txt 2011-01-05 11:43:24 +0000 +++ b/unittest/gunit/CMakeLists.txt 2011-01-14 12:38:40 +0000 @@ -212,6 +212,7 @@ SET(TESTS dbug mdl mdl_mytap + my_bitmap my_regex sql_list thread_utils === added file 'unittest/gunit/my_bitmap-t.cc' --- a/unittest/gunit/my_bitmap-t.cc 1970-01-01 00:00:00 +0000 +++ b/unittest/gunit/my_bitmap-t.cc 2011-01-14 12:38:40 +0000 @@ -0,0 +1,400 @@ +/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include "my_config.h" +#include + +#include +#include +#include + +namespace { + +uint get_rand_bit(uint bitsize) +{ + return (rand() % bitsize); +} + +bool test_set_get_clear_bit(MY_BITMAP *map, uint bitsize) +{ + uint i, test_bit; + uint no_loops= bitsize > 128 ? 128 : bitsize; + for (i=0; i < no_loops; i++) + { + test_bit= get_rand_bit(bitsize); + bitmap_set_bit(map, test_bit); + if (!bitmap_is_set(map, test_bit)) + goto error1; + bitmap_clear_bit(map, test_bit); + if (bitmap_is_set(map, test_bit)) + goto error2; + } + return FALSE; +error1: + printf("Error in set bit, bit %u, bitsize = %u", test_bit, bitsize); + return TRUE; +error2: + printf("Error in clear bit, bit %u, bitsize = %u", test_bit, bitsize); + return TRUE; +} + +bool test_flip_bit(MY_BITMAP *map, uint bitsize) +{ + uint i, test_bit; + uint no_loops= bitsize > 128 ? 128 : bitsize; + for (i=0; i < no_loops; i++) + { + test_bit= get_rand_bit(bitsize); + bitmap_flip_bit(map, test_bit); + if (!bitmap_is_set(map, test_bit)) + goto error1; + bitmap_flip_bit(map, test_bit); + if (bitmap_is_set(map, test_bit)) + goto error2; + } + return FALSE; +error1: + printf("Error in flip bit 1, bit %u, bitsize = %u", test_bit, bitsize); + return TRUE; +error2: + printf("Error in flip bit 2, bit %u, bitsize = %u", test_bit, bitsize); + return TRUE; +} + +bool test_operators(MY_BITMAP *map __attribute__((unused)), + uint bitsize __attribute__((unused))) +{ + return FALSE; +} + +bool test_get_all_bits(MY_BITMAP *map, uint bitsize) +{ + uint i; + bitmap_set_all(map); + if (!bitmap_is_set_all(map)) + goto error1; + if (!bitmap_is_prefix(map, bitsize)) + goto error5; + bitmap_clear_all(map); + if (!bitmap_is_clear_all(map)) + goto error2; + if (!bitmap_is_prefix(map, 0)) + goto error6; + for (i=0; i 128 ? 128 : bitsize; + MY_BITMAP map2_obj, map3_obj; + MY_BITMAP *map2= &map2_obj, *map3= &map3_obj; + my_bitmap_map map2buf[1024]; + my_bitmap_map map3buf[1024]; + bitmap_init(&map2_obj, map2buf, bitsize, FALSE); + bitmap_init(&map3_obj, map3buf, bitsize, FALSE); + bitmap_clear_all(map2); + bitmap_clear_all(map3); + for (i=0; i < no_loops; i++) + { + test_bit1=get_rand_bit(bitsize); + bitmap_set_prefix(map, test_bit1); + test_bit2=get_rand_bit(bitsize); + bitmap_set_prefix(map2, test_bit2); + bitmap_intersect(map, map2); + test_bit3= test_bit2 < test_bit1 ? test_bit2 : test_bit1; + bitmap_set_prefix(map3, test_bit3); + if (!bitmap_cmp(map, map3)) + goto error1; + bitmap_clear_all(map); + bitmap_clear_all(map2); + bitmap_clear_all(map3); + test_bit1=get_rand_bit(bitsize); + test_bit2=get_rand_bit(bitsize); + test_bit3=get_rand_bit(bitsize); + bitmap_set_prefix(map, test_bit1); + bitmap_set_prefix(map2, test_bit2); + test_bit3= test_bit2 > test_bit1 ? test_bit2 : test_bit1; + bitmap_set_prefix(map3, test_bit3); + bitmap_union(map, map2); + if (!bitmap_cmp(map, map3)) + goto error2; + bitmap_clear_all(map); + bitmap_clear_all(map2); + bitmap_clear_all(map3); + test_bit1=get_rand_bit(bitsize); + test_bit2=get_rand_bit(bitsize); + test_bit3=get_rand_bit(bitsize); + bitmap_set_prefix(map, test_bit1); + bitmap_set_prefix(map2, test_bit2); + bitmap_xor(map, map2); + test_bit3= test_bit2 > test_bit1 ? test_bit2 : test_bit1; + test_bit4= test_bit2 < test_bit1 ? test_bit2 : test_bit1; + bitmap_set_prefix(map3, test_bit3); + for (j=0; j < test_bit4; j++) + bitmap_clear_bit(map3, j); + if (!bitmap_cmp(map, map3)) + goto error3; + bitmap_clear_all(map); + bitmap_clear_all(map2); + bitmap_clear_all(map3); + test_bit1=get_rand_bit(bitsize); + test_bit2=get_rand_bit(bitsize); + test_bit3=get_rand_bit(bitsize); + bitmap_set_prefix(map, test_bit1); + bitmap_set_prefix(map2, test_bit2); + bitmap_subtract(map, map2); + if (test_bit2 < test_bit1) + { + bitmap_set_prefix(map3, test_bit1); + for (j=0; j < test_bit2; j++) + bitmap_clear_bit(map3, j); + } + if (!bitmap_cmp(map, map3)) + goto error4; + bitmap_clear_all(map); + bitmap_clear_all(map2); + bitmap_clear_all(map3); + test_bit1=get_rand_bit(bitsize); + bitmap_set_prefix(map, test_bit1); + bitmap_invert(map); + bitmap_set_all(map3); + for (j=0; j < test_bit1; j++) + bitmap_clear_bit(map3, j); + if (!bitmap_cmp(map, map3)) + goto error5; + bitmap_clear_all(map); + bitmap_clear_all(map3); + } + return FALSE; +error1: + printf("intersect error bitsize=%u,size1=%u,size2=%u", bitsize, + test_bit1,test_bit2); + return TRUE; +error2: + printf("union error bitsize=%u,size1=%u,size2=%u", bitsize, + test_bit1,test_bit2); + return TRUE; +error3: + printf("xor error bitsize=%u,size1=%u,size2=%u", bitsize, + test_bit1,test_bit2); + return TRUE; +error4: + printf("subtract error bitsize=%u,size1=%u,size2=%u", bitsize, + test_bit1,test_bit2); + return TRUE; +error5: + printf("invert error bitsize=%u,size=%u", bitsize, + test_bit1); + return TRUE; +} + +bool test_count_bits_set(MY_BITMAP *map, uint bitsize) +{ + uint i, bit_count=0, test_bit; + uint no_loops= bitsize > 128 ? 128 : bitsize; + for (i=0; i < no_loops; i++) + { + test_bit=get_rand_bit(bitsize); + if (!bitmap_is_set(map, test_bit)) + { + bitmap_set_bit(map, test_bit); + bit_count++; + } + } + if (bit_count==0 && bitsize > 0) + goto error1; + if (bitmap_bits_set(map) != bit_count) + goto error2; + return FALSE; +error1: + printf("No bits set bitsize = %u", bitsize); + return TRUE; +error2: + printf("Wrong count of bits set, bitsize = %u", bitsize); + return TRUE; +} + +bool test_get_first_bit(MY_BITMAP *map, uint bitsize) +{ + uint i, test_bit; + uint no_loops= bitsize > 128 ? 128 : bitsize; + for (i=0; i < no_loops; i++) + { + test_bit=get_rand_bit(bitsize); + bitmap_set_bit(map, test_bit); + if (bitmap_get_first_set(map) != test_bit) + goto error1; + bitmap_set_all(map); + bitmap_clear_bit(map, test_bit); + if (bitmap_get_first(map) != test_bit) + goto error2; + bitmap_clear_all(map); + } + return FALSE; +error1: + printf("get_first_set error bitsize=%u,prefix_size=%u",bitsize,test_bit); + return TRUE; +error2: + printf("get_first error bitsize= %u, prefix_size= %u",bitsize,test_bit); + return TRUE; +} + +bool test_get_next_bit(MY_BITMAP *map, uint bitsize) +{ + uint i, j, test_bit; + uint no_loops= bitsize > 128 ? 128 : bitsize; + for (i=0; i < no_loops; i++) + { + test_bit=get_rand_bit(bitsize); + for (j=0; j < test_bit; j++) + bitmap_set_next(map); + if (!bitmap_is_prefix(map, test_bit)) + goto error1; + bitmap_clear_all(map); + } + return FALSE; +error1: + printf("get_next error bitsize= %u, prefix_size= %u", bitsize,test_bit); + return TRUE; +} + +bool test_prefix(MY_BITMAP *map, uint bitsize) +{ + uint i, j, test_bit; + uint no_loops= bitsize > 128 ? 128 : bitsize; + for (i=0; i < no_loops; i++) + { + test_bit=get_rand_bit(bitsize); + bitmap_set_prefix(map, test_bit); + if (!bitmap_is_prefix(map, test_bit)) + goto error1; + bitmap_clear_all(map); + for (j=0; j < test_bit; j++) + bitmap_set_bit(map, j); + if (!bitmap_is_prefix(map, test_bit)) + goto error2; + bitmap_set_all(map); + for (j=bitsize - 1; ~(j-test_bit); j--) + bitmap_clear_bit(map, j); + if (!bitmap_is_prefix(map, test_bit)) + goto error3; + bitmap_clear_all(map); + } + return FALSE; +error1: + printf("prefix1 error bitsize = %u, prefix_size = %u", bitsize,test_bit); + return TRUE; +error2: + printf("prefix2 error bitsize = %u, prefix_size = %u", bitsize,test_bit); + return TRUE; +error3: + printf("prefix3 error bitsize = %u, prefix_size = %u", bitsize,test_bit); + return TRUE; +} + +#if defined(GTEST_HAS_PARAM_TEST) + +class BitMapTest : public ::testing::TestWithParam +{ +protected: + virtual void SetUp() + { + bitsize= GetParam(); + ASSERT_FALSE(bitmap_init(&map, buf, bitsize, false)); + bitmap_clear_all(&map); + } + + MY_BITMAP map; + my_bitmap_map buf[1024]; + uint bitsize; +}; + +INSTANTIATE_TEST_CASE_P(Foo, BitMapTest, ::testing::Range(1U, 4096U, 100U)); + +TEST_P(BitMapTest, TestSetGetClearBit) +{ + EXPECT_FALSE(test_set_get_clear_bit(&map, bitsize)); +} + +TEST_P(BitMapTest, TestFlipBit) +{ + EXPECT_FALSE(test_flip_bit(&map, bitsize)); +} + +TEST_P(BitMapTest, TestOperators) +{ + EXPECT_FALSE(test_operators(&map, bitsize)); +} + +TEST_P(BitMapTest, TestGetAllBits) +{ + EXPECT_FALSE(test_get_all_bits(&map, bitsize)); +} + +TEST_P(BitMapTest, TestCompareOperators) +{ + EXPECT_FALSE(test_compare_operators(&map, bitsize)); +} + +TEST_P(BitMapTest, TestCountBitsSet) +{ + EXPECT_FALSE(test_count_bits_set(&map, bitsize)); +} + +TEST_P(BitMapTest, TestGetFirstBit) +{ + EXPECT_FALSE(test_get_first_bit(&map, bitsize)); +} + +TEST_P(BitMapTest, TestGetNextBit) +{ + EXPECT_FALSE(test_get_next_bit(&map, bitsize)); +} + +TEST_P(BitMapTest, TestPrefix) +{ + EXPECT_FALSE(test_prefix(&map, bitsize)); +} + +#endif + +} --===============1621458171393933382== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/tor.didriksen@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: tor.didriksen@stripped\ # g33qwq8x1hjoo4h7 # target_branch: file:///export/home/didrik/repo/next-mr-gtest-bitmap/ # testament_sha1: 8269cf99a4fbf9f7d752f3cbe97f8970357ed388 # timestamp: 2011-01-14 13:38:43 +0100 # base_revision_id: tor.didriksen@stripped\ # 12ly8gbb4q1rw9zb # # Begin bundle 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 me5YiVeLwVQ3m4EmASZWJn/xdyRThQkMCnzcQA== --===============1621458171393933382==--