From: Tor Didriksen Date: May 3 2011 7:10am Subject: bzr commit into mysql-trunk branch (tor.didriksen:3358) List-Archive: http://lists.mysql.com/commits/136555 Message-Id: <20110503071055.61CC937DC@atum07.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============9138045441062790837==" --===============9138045441062790837== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/didrik/repo/trunk-review-jorgen-range/ based on revid:tor.didriksen@stripped 3358 Tor Didriksen 2011-05-03 testing testing added: unittest/gunit/opt_range-t.cc modified: unittest/gunit/CMakeLists.txt === modified file 'unittest/gunit/CMakeLists.txt' --- a/unittest/gunit/CMakeLists.txt 2011-04-13 11:31:44 +0000 +++ b/unittest/gunit/CMakeLists.txt 2011-05-03 07:10:50 +0000 @@ -219,6 +219,7 @@ SET(TESTS # Add tests (link them with gunit library and the server libraries) SET(SERVER_TESTS item + opt_range ) FOREACH(test ${TESTS}) === added file 'unittest/gunit/opt_range-t.cc' --- a/unittest/gunit/opt_range-t.cc 1970-01-01 00:00:00 +0000 +++ b/unittest/gunit/opt_range-t.cc 2011-05-03 07:10:50 +0000 @@ -0,0 +1,175 @@ +/* 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 */ + +// First include (the generated) my_config.h, to get correct platform defines, +// then gtest.h (before any other MySQL headers), to avoid min() macros etc ... +#include "my_config.h" +#include + +#include "rpl_handler.h" // delegates_init() +#include "opt_range.cc" + +namespace { + +/* + A mock error handler for error_handler_hook. +*/ +uint expected_error= 0; +extern "C" void test_error_handler_hook(uint err, const char *str, myf MyFlags) +{ + EXPECT_EQ(expected_error, err) << str; +} + +class SelArgTest : public ::testing::Test +{ +protected: + /* + This is the part of the server global things which have to be initialized + for this (very simple) unit test. Presumably the list will grow once + we start writing tests for more advanced classes. + TODO: Move to a common library. + */ + static void SetUpTestCase() + { + static char *my_name= strdup(my_progname); + char *argv[] = { my_name, 0 }; + set_remaining_args(1, argv); + init_common_variables(); + my_init_signals(); + randominit(&sql_rand, 0, 0); + xid_cache_init(); + delegates_init(); + error_handler_hook= test_error_handler_hook; + } + + static void TearDownTestCase() + { + delegates_destroy(); + xid_cache_free(); + } + + SelArgTest() : m_thd(NULL) + { + memset(&m_opt_param, 0, sizeof(m_opt_param)); + } + + virtual void SetUp() + { + expected_error= 0; + m_thd= new THD(false); + THD *stack_thd= m_thd; + m_thd->thread_stack= (char*) &stack_thd; + m_thd->store_globals(); + lex_start(m_thd); + m_opt_param.thd= m_thd; + m_opt_param.mem_root= &m_alloc; + init_sql_alloc(&m_alloc, m_thd->variables.range_alloc_block_size, 0); + } + + virtual void TearDown() + { + m_thd->cleanup_after_query(); + delete m_thd; + free_root(&m_alloc, MYF(0)); + } + + THD *m_thd; + MEM_ROOT m_alloc; + RANGE_OPT_PARAM m_opt_param; +}; + +/* + Experiment with these to measure performance of + 'new (thd->mem_root)' Foo vs. 'new Foo'. + With gcc 4.4.2 I see ~4% difference (in optimized mode). +*/ +const int num_iterations= 10; +const int num_allocs= 10; + +TEST_F(SelArgTest, AllocateExplicit) +{ + for (int ix= 0; ix < num_iterations; ++ix) + { + free_root(m_thd->mem_root, MYF(MY_KEEP_PREALLOC)); + for (int ii= 0; ii < num_allocs; ++ii) + new (m_thd->mem_root) SEL_ARG; + } +} + +TEST_F(SelArgTest, AllocateImplicit) +{ + for (int ix= 0; ix < num_iterations; ++ix) + { + free_root(m_thd->mem_root, MYF(MY_KEEP_PREALLOC)); + for (int ii= 0; ii < num_allocs; ++ii) + new SEL_ARG; + } +} + +/* + We cannot do EXPECT_NE(NULL, get_mm_tree(...)) + because of limits in google test. + */ +const SEL_TREE *null_tree= NULL; + + +class Mock_field_long : public Field_long +{ +public: + Mock_field_long() + : Field_long(0, // ptr_arg + 8, // len_arg + NULL, // null_ptr_arg + 0, // null_bit_arg + Field::NONE, // unireg_check_arg + "field_name", // field_name_arg + false, // zero_arg + false) // unsigned_arg + { + m_table_name= "mock_table"; + memset(&m_share, 0, sizeof(m_share)); + const char *foo= "mock_db"; + m_share.db.str= const_cast(foo); + m_share.db.length= strlen(m_share.db.str); + + memset(&m_table, 0, sizeof(m_table)); + m_table.s= &m_share; + this->table_name= &m_table_name; + this->table= &m_table; + } + const char *m_table_name; + TABLE_SHARE m_share; + TABLE m_table; +}; + + +TEST_F(SelArgTest, SimpleCond) +{ + EXPECT_NE(null_tree, get_mm_tree(&m_opt_param, new Item_int(42))); +} + + +TEST_F(SelArgTest, EqualCond) +{ + Mock_field_long field_long; + EXPECT_EQ(null_tree, + get_mm_tree(&m_opt_param, + new Item_equal(new Item_int(42), + new Item_field(&field_long)))); +} + +} + + --===============9138045441062790837== 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\ # 5teaib2i8lcvci94 # target_branch: file:///export/home/didrik/repo/trunk-review-jorgen-\ # range/ # testament_sha1: b1c9c502d764a77b70397897820323dcad65c20f # timestamp: 2011-05-03 09:10:55 +0200 # base_revision_id: tor.didriksen@stripped\ # fs6kua6ypzxqmiq2 # # Begin bundle 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 KkqaZoFNVIcB2ohIUCBQhH/i7kinChIItV52AA== --===============9138045441062790837==--