MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
cost_estimate-t.cc
1 /* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
2 
3  This program is free software; you can redistribute it and/or modify
4  it under the terms of the GNU General Public License as published by
5  the Free Software Foundation; version 2 of the License.
6 
7  This program is distributed in the hope that it will be useful,
8  but WITHOUT ANY WARRANTY; without even the implied warranty of
9  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  GNU General Public License for more details.
11 
12  You should have received a copy of the GNU General Public License
13  along with this program; if not, write to the Free Software
14  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */
15 
16 // First include (the generated) my_config.h, to get correct platform defines.
17 #include "my_config.h"
18 #include <gtest/gtest.h>
19 
20 #include "handler.h"
21 
22 namespace cost_estimate_unittest {
23 
24 TEST(CostEstimateTest, Basics)
25 {
26  Cost_estimate ce1;
27 
28  EXPECT_EQ(0, ce1.total_cost());
29  EXPECT_TRUE(ce1.is_zero());
30 
31  const double initial_io_cost= 4.5;
32 
33  ce1.add_io(initial_io_cost);
34  EXPECT_FALSE(ce1.is_zero());
35  EXPECT_DOUBLE_EQ(initial_io_cost, ce1.total_cost());
36 
37  const double initial_cpu_cost= 3.3;
38  ce1.add_cpu(initial_cpu_cost);
39 
40  EXPECT_DOUBLE_EQ(initial_cpu_cost, ce1.get_cpu_cost());
41  EXPECT_DOUBLE_EQ(initial_io_cost, ce1.get_io_cost());
42  EXPECT_DOUBLE_EQ(initial_io_cost + initial_cpu_cost, ce1.total_cost());
43 
44  EXPECT_EQ(0, ce1.get_mem_cost());
45  EXPECT_EQ(0, ce1.get_import_cost());
46 
47  const double initial_mem_cost= 7;
48  const double initial_import_cost= 11;
49  ce1.add_mem(initial_mem_cost);
50  ce1.add_import(initial_import_cost);
51 
52  const double total_initial_cost=
53  initial_io_cost + initial_cpu_cost + initial_import_cost;
54  EXPECT_DOUBLE_EQ(total_initial_cost, ce1.total_cost());
55 
56  const double added_io_cost= 1.5;
57  ce1.add_io(added_io_cost);
58  EXPECT_DOUBLE_EQ(initial_io_cost + added_io_cost, ce1.get_io_cost());
59  EXPECT_DOUBLE_EQ(total_initial_cost + added_io_cost, ce1.total_cost());
60 
61  EXPECT_FALSE(ce1.is_zero());
62 
63  ce1.reset();
64  EXPECT_TRUE(ce1.is_zero());
65 
66 }
67 
68 TEST(CostEstimateTest, Operators)
69 {
70  Cost_estimate ce_io;
71 
72  EXPECT_EQ(0, ce_io.total_cost());
73  EXPECT_TRUE(ce_io.is_zero());
74 
75  const double initial_io_cost= 4.5;
76  ce_io.add_io(initial_io_cost);
77  EXPECT_DOUBLE_EQ(initial_io_cost, ce_io.total_cost());
78 
79  Cost_estimate ce_cpu;
80  const double initial_cpu_cost= 3.3;
81  ce_cpu.add_cpu(initial_cpu_cost);
82  EXPECT_DOUBLE_EQ(initial_cpu_cost, ce_cpu.total_cost());
83  EXPECT_EQ(0, ce_cpu.get_io_cost());
84 
85  // Copy CTOR
86  Cost_estimate ce_copy(ce_io);
87  const double added_io_cost= 1.5;
88  ce_io.add_io(added_io_cost); // should not add to ce_copy
89  EXPECT_DOUBLE_EQ(initial_io_cost + added_io_cost, ce_io.total_cost());
90  EXPECT_DOUBLE_EQ(initial_io_cost, ce_copy.total_cost());
91 
92  // operator+=
93  ce_copy+= ce_cpu;
94  EXPECT_DOUBLE_EQ(initial_io_cost + initial_cpu_cost, ce_copy.total_cost());
95 
96  // operator+
97  Cost_estimate ce_copy2= ce_io + ce_cpu;
98  const double copy2_totcost=
99  initial_io_cost + added_io_cost + initial_cpu_cost;
100  EXPECT_DOUBLE_EQ(copy2_totcost, ce_copy2.total_cost());
101 
102  Cost_estimate ce_mem_import1;
103  const double import1_mem_cost= 3;
104  const double import1_import_cost= 5;
105  ce_mem_import1.add_mem(import1_mem_cost);
106  ce_mem_import1.add_import(import1_import_cost);
107 
108  Cost_estimate ce_mem_import2;
109  const double import2_mem_cost= 11;
110  const double import2_import_cost= 13;
111  ce_mem_import2.add_mem(import2_mem_cost);
112  ce_mem_import2.add_import(import2_import_cost);
113 
114  // operator+
115  Cost_estimate ce_mi_copy= ce_mem_import1 + ce_mem_import2;
116  EXPECT_DOUBLE_EQ(import1_import_cost + import2_import_cost,
117  ce_mi_copy.total_cost());
118  EXPECT_DOUBLE_EQ(import1_mem_cost + import2_mem_cost,
119  ce_mi_copy.get_mem_cost());
120  EXPECT_DOUBLE_EQ(import1_import_cost + import2_import_cost,
121  ce_mi_copy.get_import_cost());
122 
123  // operator+=
124  ce_mi_copy+= ce_mem_import1;
125  EXPECT_DOUBLE_EQ(2*import1_import_cost + import2_import_cost,
126  ce_mi_copy.total_cost());
127  EXPECT_DOUBLE_EQ(2*import1_mem_cost + import2_mem_cost,
128  ce_mi_copy.get_mem_cost());
129  EXPECT_DOUBLE_EQ(2*import1_import_cost + import2_import_cost,
130  ce_mi_copy.get_import_cost());
131 
132  // copy assignment
133  Cost_estimate ce_copy3;
134  ce_copy3= ce_copy2;
135  EXPECT_DOUBLE_EQ(copy2_totcost, ce_copy3.total_cost());
136 }
137 
138 
139 } //namespace