• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright 2022 The TensorFlow Authors. All Rights Reserved.
2 
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 
7     http://www.apache.org/licenses/LICENSE-2.0
8 
9 Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License.
14 ==============================================================================*/
15 #include "tensorflow/core/lib/monitoring/cell_reader.h"
16 
17 #include <cstdint>
18 #include <string>
19 #include <vector>
20 
21 #include "tensorflow/core/lib/monitoring/counter.h"
22 #include "tensorflow/core/lib/monitoring/gauge.h"
23 #include "tensorflow/core/lib/monitoring/percentile_sampler.h"
24 #include "tensorflow/core/lib/monitoring/sampler.h"
25 #include "tensorflow/core/lib/monitoring/test_utils.h"
26 #include "tensorflow/core/lib/monitoring/types.h"
27 #include "tensorflow/core/platform/test.h"
28 
29 namespace tensorflow {
30 namespace monitoring {
31 namespace testing {
32 namespace {
33 
GetDefaultPercentiles()34 std::vector<double> GetDefaultPercentiles() {
35   return {25.0, 50.0, 80.0, 90.0, 95.0, 99.0};
36 }
37 
38 auto* test_counter = monitoring::Counter<0>::New(
39     "/tensorflow/monitoring/test/counter", "Test counter.");
40 
41 auto* test_counter_with_labels = monitoring::Counter<2>::New(
42     "/tensorflow/monitoring/test/counter_with_labels",
43     "Test counter with two labels.", "label1", "label2");
44 
45 auto* test_sampler = monitoring::Sampler<0>::New(
46     {"/tensorflow/monitoring/test/sampler", "Test sampler."},
47     /*buckets=*/monitoring::Buckets::Explicit(
48         {0.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0}));
49 
50 auto* test_sampler_with_labels = monitoring::Sampler<2>::New(
51     {"/tensorflow/monitoring/test/sampler_with_labels", "Test sampler.",
52      "label1", "label2"},
53     /*buckets=*/monitoring::Buckets::Exponential(
54         /*scale=*/1, /*growth_factor=*/10, /*bucket_count=*/5));
55 
56 auto* test_int_gauge = monitoring::Gauge<int64_t, 0>::New(
57     "/tensorflow/monitoring/test/int_gauge", "Test gauge.");
58 
59 auto* test_int_gauge_with_labels = monitoring::Gauge<int64_t, 2>::New(
60     "/tensorflow/monitoring/test/int_gauge_with_labels", "Test gauge.",
61     "label1", "label2");
62 
63 auto* test_string_gauge = monitoring::Gauge<std::string, 0>::New(
64     "/tensorflow/monitoring/test/string_gauge", "Test gauge.");
65 
66 auto* test_string_gauge_with_labels = monitoring::Gauge<std::string, 2>::New(
67     "/tensorflow/monitoring/test/string_gauge_with_labels", "Test gauge.",
68     "label1", "label2");
69 
70 auto* test_bool_gauge = monitoring::Gauge<bool, 0>::New(
71     "/tensorflow/monitoring/test/bool_gauge", "Test gauge.");
72 
73 auto* test_bool_gauge_with_labels = monitoring::Gauge<bool, 2>::New(
74     "/tensorflow/monitoring/test/bool_gauge_with_labels", "Test gauge.",
75     "label1", "label2");
76 
77 auto* test_percentiles = monitoring::PercentileSampler<0>::New(
78     {"/tensorflow/monitoring/test/percentiles", "Test percentiles."},
79     GetDefaultPercentiles(), /*max_samples=*/1024,
80     monitoring::UnitOfMeasure::kTime);
81 
82 auto* test_percentiles_with_labels = monitoring::PercentileSampler<2>::New(
83     {"/tensorflow/monitoring/test/percentiles_with_labels", "Test percentiles.",
84      "label1", "label2"},
85     GetDefaultPercentiles(), /*max_samples=*/1024,
86     monitoring::UnitOfMeasure::kTime);
87 
TEST(CellReaderTest,CounterDeltaNoLabels)88 TEST(CellReaderTest, CounterDeltaNoLabels) {
89   CellReader<int64_t> cell_reader("/tensorflow/monitoring/test/counter");
90   EXPECT_EQ(cell_reader.Delta(), 0);
91 
92   test_counter->GetCell()->IncrementBy(5);
93   EXPECT_EQ(cell_reader.Delta(), 5);
94 
95   test_counter->GetCell()->IncrementBy(10);
96   EXPECT_EQ(cell_reader.Delta(), 10);
97 
98   test_counter->GetCell()->IncrementBy(100);
99   EXPECT_EQ(cell_reader.Delta(), 100);
100 }
101 
TEST(CellReaderTest,CounterReadNoLabels)102 TEST(CellReaderTest, CounterReadNoLabels) {
103   CellReader<int64_t> cell_reader("/tensorflow/monitoring/test/counter");
104   EXPECT_EQ(cell_reader.Read(), 0);
105 
106   test_counter->GetCell()->IncrementBy(5);
107   EXPECT_EQ(cell_reader.Read(), 5);
108 
109   test_counter->GetCell()->IncrementBy(10);
110   EXPECT_EQ(cell_reader.Read(), 15);
111 
112   test_counter->GetCell()->IncrementBy(100);
113   EXPECT_EQ(cell_reader.Read(), 115);
114 }
115 
TEST(CellReaderTest,CounterDeltaAndReadNoLabels)116 TEST(CellReaderTest, CounterDeltaAndReadNoLabels) {
117   CellReader<int64_t> cell_reader("/tensorflow/monitoring/test/counter");
118   EXPECT_EQ(cell_reader.Delta(), 0);
119   EXPECT_EQ(cell_reader.Read(), 0);
120 
121   test_counter->GetCell()->IncrementBy(5);
122   EXPECT_EQ(cell_reader.Delta(), 5);
123   EXPECT_EQ(cell_reader.Read(), 5);
124 
125   test_counter->GetCell()->IncrementBy(10);
126   EXPECT_EQ(cell_reader.Delta(), 10);
127   EXPECT_EQ(cell_reader.Read(), 15);
128 
129   test_counter->GetCell()->IncrementBy(100);
130   EXPECT_EQ(cell_reader.Delta(), 100);
131   EXPECT_EQ(cell_reader.Read(), 115);
132 }
133 
TEST(CellReaderTest,CounterDeltaWithLabels)134 TEST(CellReaderTest, CounterDeltaWithLabels) {
135   CellReader<int64_t> cell_reader(
136       "/tensorflow/monitoring/test/counter_with_labels");
137   EXPECT_EQ(cell_reader.Delta("x1", "y1"), 0);
138   EXPECT_EQ(cell_reader.Delta("x1", "y2"), 0);
139   EXPECT_EQ(cell_reader.Delta("x2", "y1"), 0);
140   EXPECT_EQ(cell_reader.Delta("x2", "y2"), 0);
141 
142   test_counter_with_labels->GetCell("x1", "y1")->IncrementBy(1);
143   test_counter_with_labels->GetCell("x1", "y2")->IncrementBy(10);
144   test_counter_with_labels->GetCell("x2", "y1")->IncrementBy(100);
145   EXPECT_EQ(cell_reader.Delta("x1", "y1"), 1);
146   EXPECT_EQ(cell_reader.Delta("x1", "y2"), 10);
147   EXPECT_EQ(cell_reader.Delta("x2", "y1"), 100);
148   EXPECT_EQ(cell_reader.Delta("x2", "y2"), 0);
149 
150   test_counter_with_labels->GetCell("x1", "y2")->IncrementBy(5);
151   test_counter_with_labels->GetCell("x2", "y1")->IncrementBy(50);
152   test_counter_with_labels->GetCell("x2", "y2")->IncrementBy(500);
153   EXPECT_EQ(cell_reader.Delta("x1", "y1"), 0);
154   EXPECT_EQ(cell_reader.Delta("x1", "y2"), 5);
155   EXPECT_EQ(cell_reader.Delta("x2", "y1"), 50);
156   EXPECT_EQ(cell_reader.Delta("x2", "y2"), 500);
157 
158   test_counter_with_labels->GetCell("x1", "y1")->IncrementBy(1000);
159   test_counter_with_labels->GetCell("x2", "y2")->IncrementBy(1000);
160   EXPECT_EQ(cell_reader.Delta("x1", "y1"), 1000);
161   EXPECT_EQ(cell_reader.Delta("x1", "y2"), 0);
162   EXPECT_EQ(cell_reader.Delta("x2", "y1"), 0);
163   EXPECT_EQ(cell_reader.Delta("x2", "y2"), 1000);
164 }
165 
TEST(CellReaderTest,CounterReadWithLabels)166 TEST(CellReaderTest, CounterReadWithLabels) {
167   CellReader<int64_t> cell_reader(
168       "/tensorflow/monitoring/test/counter_with_labels");
169   EXPECT_EQ(cell_reader.Read("x1", "y1"), 0);
170   EXPECT_EQ(cell_reader.Read("x1", "y2"), 0);
171   EXPECT_EQ(cell_reader.Read("x2", "y1"), 0);
172   EXPECT_EQ(cell_reader.Read("x2", "y2"), 0);
173 
174   test_counter_with_labels->GetCell("x1", "y1")->IncrementBy(1);
175   test_counter_with_labels->GetCell("x1", "y2")->IncrementBy(10);
176   test_counter_with_labels->GetCell("x2", "y1")->IncrementBy(100);
177   EXPECT_EQ(cell_reader.Read("x1", "y1"), 1);
178   EXPECT_EQ(cell_reader.Read("x1", "y2"), 10);
179   EXPECT_EQ(cell_reader.Read("x2", "y1"), 100);
180   EXPECT_EQ(cell_reader.Read("x2", "y2"), 0);
181 
182   test_counter_with_labels->GetCell("x1", "y2")->IncrementBy(5);
183   test_counter_with_labels->GetCell("x2", "y1")->IncrementBy(50);
184   test_counter_with_labels->GetCell("x2", "y2")->IncrementBy(500);
185   EXPECT_EQ(cell_reader.Read("x1", "y1"), 1);
186   EXPECT_EQ(cell_reader.Read("x1", "y2"), 15);
187   EXPECT_EQ(cell_reader.Read("x2", "y1"), 150);
188   EXPECT_EQ(cell_reader.Read("x2", "y2"), 500);
189 
190   test_counter_with_labels->GetCell("x1", "y1")->IncrementBy(1000);
191   test_counter_with_labels->GetCell("x2", "y2")->IncrementBy(1000);
192   EXPECT_EQ(cell_reader.Read("x1", "y1"), 1001);
193   EXPECT_EQ(cell_reader.Read("x1", "y2"), 15);
194   EXPECT_EQ(cell_reader.Read("x2", "y1"), 150);
195   EXPECT_EQ(cell_reader.Read("x2", "y2"), 1500);
196 }
197 
TEST(CellReaderTest,CounterDeltaAndReadWithLabels)198 TEST(CellReaderTest, CounterDeltaAndReadWithLabels) {
199   CellReader<int64_t> cell_reader(
200       "/tensorflow/monitoring/test/counter_with_labels");
201   EXPECT_EQ(cell_reader.Delta("x1", "y1"), 0);
202   EXPECT_EQ(cell_reader.Delta("x1", "y2"), 0);
203   EXPECT_EQ(cell_reader.Delta("x2", "y1"), 0);
204   EXPECT_EQ(cell_reader.Delta("x2", "y2"), 0);
205   EXPECT_EQ(cell_reader.Read("x1", "y1"), 0);
206   EXPECT_EQ(cell_reader.Read("x1", "y2"), 0);
207   EXPECT_EQ(cell_reader.Read("x2", "y1"), 0);
208   EXPECT_EQ(cell_reader.Read("x2", "y2"), 0);
209 
210   test_counter_with_labels->GetCell("x1", "y1")->IncrementBy(1);
211   test_counter_with_labels->GetCell("x1", "y2")->IncrementBy(10);
212   test_counter_with_labels->GetCell("x2", "y1")->IncrementBy(100);
213   EXPECT_EQ(cell_reader.Delta("x1", "y1"), 1);
214   EXPECT_EQ(cell_reader.Delta("x1", "y2"), 10);
215   EXPECT_EQ(cell_reader.Delta("x2", "y1"), 100);
216   EXPECT_EQ(cell_reader.Delta("x2", "y2"), 0);
217   EXPECT_EQ(cell_reader.Read("x1", "y1"), 1);
218   EXPECT_EQ(cell_reader.Read("x1", "y2"), 10);
219   EXPECT_EQ(cell_reader.Read("x2", "y1"), 100);
220   EXPECT_EQ(cell_reader.Read("x2", "y2"), 0);
221 
222   test_counter_with_labels->GetCell("x1", "y2")->IncrementBy(5);
223   test_counter_with_labels->GetCell("x2", "y1")->IncrementBy(50);
224   test_counter_with_labels->GetCell("x2", "y2")->IncrementBy(500);
225   EXPECT_EQ(cell_reader.Delta("x1", "y1"), 0);
226   EXPECT_EQ(cell_reader.Delta("x1", "y2"), 5);
227   EXPECT_EQ(cell_reader.Delta("x2", "y1"), 50);
228   EXPECT_EQ(cell_reader.Delta("x2", "y2"), 500);
229   EXPECT_EQ(cell_reader.Read("x1", "y1"), 1);
230   EXPECT_EQ(cell_reader.Read("x1", "y2"), 15);
231   EXPECT_EQ(cell_reader.Read("x2", "y1"), 150);
232   EXPECT_EQ(cell_reader.Read("x2", "y2"), 500);
233 
234   test_counter_with_labels->GetCell("x1", "y1")->IncrementBy(1000);
235   test_counter_with_labels->GetCell("x2", "y2")->IncrementBy(1000);
236   EXPECT_EQ(cell_reader.Delta("x1", "y1"), 1000);
237   EXPECT_EQ(cell_reader.Delta("x1", "y2"), 0);
238   EXPECT_EQ(cell_reader.Delta("x2", "y1"), 0);
239   EXPECT_EQ(cell_reader.Delta("x2", "y2"), 1000);
240   EXPECT_EQ(cell_reader.Read("x1", "y1"), 1001);
241   EXPECT_EQ(cell_reader.Read("x1", "y2"), 15);
242   EXPECT_EQ(cell_reader.Read("x2", "y1"), 150);
243   EXPECT_EQ(cell_reader.Read("x2", "y2"), 1500);
244 }
245 
TEST(CellReaderTest,TwoCounterReaders)246 TEST(CellReaderTest, TwoCounterReaders) {
247   CellReader<int64_t> cell_reader("/tensorflow/monitoring/test/counter");
248   CellReader<int64_t> cell_reader_with_labels(
249       "/tensorflow/monitoring/test/counter_with_labels");
250   EXPECT_EQ(cell_reader.Delta(), 0);
251   EXPECT_EQ(cell_reader_with_labels.Delta("x1", "y1"), 0);
252   EXPECT_EQ(cell_reader_with_labels.Delta("x2", "y2"), 0);
253   EXPECT_EQ(cell_reader.Read(), 0);
254   EXPECT_EQ(cell_reader_with_labels.Read("x1", "y1"), 0);
255   EXPECT_EQ(cell_reader_with_labels.Read("x2", "y2"), 0);
256 
257   test_counter->GetCell()->IncrementBy(1);
258   test_counter_with_labels->GetCell("x1", "y1")->IncrementBy(100);
259   EXPECT_EQ(cell_reader.Delta(), 1);
260   EXPECT_EQ(cell_reader_with_labels.Delta("x1", "y1"), 100);
261   EXPECT_EQ(cell_reader_with_labels.Delta("x2", "y2"), 0);
262   EXPECT_EQ(cell_reader.Read(), 1);
263   EXPECT_EQ(cell_reader_with_labels.Read("x1", "y1"), 100);
264   EXPECT_EQ(cell_reader_with_labels.Read("x2", "y2"), 0);
265 
266   test_counter->GetCell()->IncrementBy(5);
267   test_counter_with_labels->GetCell("x2", "y2")->IncrementBy(500);
268   EXPECT_EQ(cell_reader.Delta(), 5);
269   EXPECT_EQ(cell_reader_with_labels.Delta("x1", "y1"), 0);
270   EXPECT_EQ(cell_reader_with_labels.Delta("x2", "y2"), 500);
271   EXPECT_EQ(cell_reader.Read(), 6);
272   EXPECT_EQ(cell_reader_with_labels.Read("x1", "y1"), 100);
273   EXPECT_EQ(cell_reader_with_labels.Read("x2", "y2"), 500);
274 
275   test_counter->GetCell()->IncrementBy(1);
276   test_counter_with_labels->GetCell("x1", "y1")->IncrementBy(1);
277   test_counter_with_labels->GetCell("x2", "y2")->IncrementBy(1);
278   EXPECT_EQ(cell_reader.Delta(), 1);
279   EXPECT_EQ(cell_reader_with_labels.Delta("x1", "y1"), 1);
280   EXPECT_EQ(cell_reader_with_labels.Delta("x2", "y2"), 1);
281   EXPECT_EQ(cell_reader.Read(), 7);
282   EXPECT_EQ(cell_reader_with_labels.Read("x1", "y1"), 101);
283   EXPECT_EQ(cell_reader_with_labels.Read("x2", "y2"), 501);
284 }
285 
TEST(CellReaderTest,RepeatedReads)286 TEST(CellReaderTest, RepeatedReads) {
287   CellReader<int64_t> cell_reader("/tensorflow/monitoring/test/counter");
288   CellReader<int64_t> cell_reader_with_labels(
289       "/tensorflow/monitoring/test/counter_with_labels");
290   EXPECT_EQ(cell_reader.Delta(), 0);
291   EXPECT_EQ(cell_reader_with_labels.Delta("x1", "y1"), 0);
292   EXPECT_EQ(cell_reader_with_labels.Delta("x2", "y2"), 0);
293   EXPECT_EQ(cell_reader.Read(), 0);
294   EXPECT_EQ(cell_reader_with_labels.Read("x1", "y1"), 0);
295   EXPECT_EQ(cell_reader_with_labels.Read("x2", "y2"), 0);
296 
297   test_counter->GetCell()->IncrementBy(1);
298   test_counter_with_labels->GetCell("x1", "y1")->IncrementBy(100);
299   EXPECT_EQ(cell_reader.Delta(), 1);
300   EXPECT_EQ(cell_reader_with_labels.Delta("x1", "y1"), 100);
301   EXPECT_EQ(cell_reader_with_labels.Delta("x2", "y2"), 0);
302   EXPECT_EQ(cell_reader.Read(), 1);
303   EXPECT_EQ(cell_reader_with_labels.Read("x1", "y1"), 100);
304   EXPECT_EQ(cell_reader_with_labels.Read("x2", "y2"), 0);
305 
306   // Repeats the previous read. The values will stay the same, while the deltas
307   // will be 0.
308   EXPECT_EQ(cell_reader.Delta(), 0);
309   EXPECT_EQ(cell_reader_with_labels.Delta("x1", "y1"), 0);
310   EXPECT_EQ(cell_reader_with_labels.Delta("x2", "y2"), 0);
311   EXPECT_EQ(cell_reader.Read(), 1);
312   EXPECT_EQ(cell_reader_with_labels.Read("x1", "y1"), 100);
313   EXPECT_EQ(cell_reader_with_labels.Read("x2", "y2"), 0);
314 }
315 
TEST(CellReaderTest,SamplerDeltaNoLabels)316 TEST(CellReaderTest, SamplerDeltaNoLabels) {
317   CellReader<Histogram> cell_reader("/tensorflow/monitoring/test/sampler");
318   Histogram histogram = cell_reader.Delta();
319   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
320   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
321   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.0);
322   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
323   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
324   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
325   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
326   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
327   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
328   EXPECT_FLOAT_EQ(histogram.num(6), 0.0);
329   EXPECT_FLOAT_EQ(histogram.num(7), 0.0);
330   EXPECT_FLOAT_EQ(histogram.num(8), 0.0);
331   EXPECT_FLOAT_EQ(histogram.num(9), 0.0);
332   EXPECT_FLOAT_EQ(histogram.num(10), 0.0);
333   EXPECT_FLOAT_EQ(histogram.num(11), 0.0);
334   EXPECT_FLOAT_EQ(histogram.num(12), 0.0);
335 
336   test_sampler->GetCell()->Add(0.1);
337   histogram = cell_reader.Delta();
338   EXPECT_FLOAT_EQ(histogram.num(), 1.0);
339   EXPECT_FLOAT_EQ(histogram.sum(), 0.1);
340   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.01);
341   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
342   EXPECT_FLOAT_EQ(histogram.num(1), 1.0);
343   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
344   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
345   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
346   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
347   EXPECT_FLOAT_EQ(histogram.num(6), 0.0);
348   EXPECT_FLOAT_EQ(histogram.num(7), 0.0);
349   EXPECT_FLOAT_EQ(histogram.num(8), 0.0);
350   EXPECT_FLOAT_EQ(histogram.num(9), 0.0);
351   EXPECT_FLOAT_EQ(histogram.num(10), 0.0);
352   EXPECT_FLOAT_EQ(histogram.num(11), 0.0);
353   EXPECT_FLOAT_EQ(histogram.num(12), 0.0);
354 
355   test_sampler->GetCell()->Add(1.1);
356   histogram = cell_reader.Delta();
357   EXPECT_FLOAT_EQ(histogram.num(), 1.0);
358   EXPECT_FLOAT_EQ(histogram.sum(), 1.1);
359   EXPECT_FLOAT_EQ(histogram.sum_squares(), 1.21);
360   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
361   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
362   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
363   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
364   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
365   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
366   EXPECT_FLOAT_EQ(histogram.num(6), 1.0);
367   EXPECT_FLOAT_EQ(histogram.num(7), 0.0);
368   EXPECT_FLOAT_EQ(histogram.num(8), 0.0);
369   EXPECT_FLOAT_EQ(histogram.num(9), 0.0);
370   EXPECT_FLOAT_EQ(histogram.num(10), 0.0);
371   EXPECT_FLOAT_EQ(histogram.num(11), 0.0);
372   EXPECT_FLOAT_EQ(histogram.num(12), 0.0);
373 
374   test_sampler->GetCell()->Add(100);
375   histogram = cell_reader.Delta();
376   EXPECT_FLOAT_EQ(histogram.num(), 1.0);
377   EXPECT_FLOAT_EQ(histogram.sum(), 100);
378   EXPECT_FLOAT_EQ(histogram.sum_squares(), 10000);
379   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
380   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
381   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
382   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
383   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
384   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
385   EXPECT_FLOAT_EQ(histogram.num(6), 0.0);
386   EXPECT_FLOAT_EQ(histogram.num(7), 0.0);
387   EXPECT_FLOAT_EQ(histogram.num(8), 0.0);
388   EXPECT_FLOAT_EQ(histogram.num(9), 0.0);
389   EXPECT_FLOAT_EQ(histogram.num(10), 0.0);
390   EXPECT_FLOAT_EQ(histogram.num(11), 1.0);
391   EXPECT_FLOAT_EQ(histogram.num(12), 0.0);
392 }
393 
TEST(CellReaderTest,SamplerReadNoLabels)394 TEST(CellReaderTest, SamplerReadNoLabels) {
395   CellReader<Histogram> cell_reader("/tensorflow/monitoring/test/sampler");
396   Histogram histogram = cell_reader.Read();
397   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
398   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
399   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.0);
400   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
401   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
402   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
403   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
404   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
405   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
406   EXPECT_FLOAT_EQ(histogram.num(6), 0.0);
407   EXPECT_FLOAT_EQ(histogram.num(7), 0.0);
408   EXPECT_FLOAT_EQ(histogram.num(8), 0.0);
409   EXPECT_FLOAT_EQ(histogram.num(9), 0.0);
410   EXPECT_FLOAT_EQ(histogram.num(10), 0.0);
411   EXPECT_FLOAT_EQ(histogram.num(11), 0.0);
412   EXPECT_FLOAT_EQ(histogram.num(12), 0.0);
413 
414   test_sampler->GetCell()->Add(0.1);
415   histogram = cell_reader.Read();
416   EXPECT_FLOAT_EQ(histogram.num(), 1.0);
417   EXPECT_FLOAT_EQ(histogram.sum(), 0.1);
418   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.01);
419   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
420   EXPECT_FLOAT_EQ(histogram.num(1), 1.0);
421   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
422   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
423   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
424   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
425   EXPECT_FLOAT_EQ(histogram.num(6), 0.0);
426   EXPECT_FLOAT_EQ(histogram.num(7), 0.0);
427   EXPECT_FLOAT_EQ(histogram.num(8), 0.0);
428   EXPECT_FLOAT_EQ(histogram.num(9), 0.0);
429   EXPECT_FLOAT_EQ(histogram.num(10), 0.0);
430   EXPECT_FLOAT_EQ(histogram.num(11), 0.0);
431   EXPECT_FLOAT_EQ(histogram.num(12), 0.0);
432 
433   test_sampler->GetCell()->Add(1.1);
434   histogram = cell_reader.Read();
435   EXPECT_FLOAT_EQ(histogram.num(), 2.0);
436   EXPECT_FLOAT_EQ(histogram.sum(), 1.2);
437   EXPECT_FLOAT_EQ(histogram.sum_squares(), 1.22);
438   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
439   EXPECT_FLOAT_EQ(histogram.num(1), 1.0);
440   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
441   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
442   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
443   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
444   EXPECT_FLOAT_EQ(histogram.num(6), 1.0);
445   EXPECT_FLOAT_EQ(histogram.num(7), 0.0);
446   EXPECT_FLOAT_EQ(histogram.num(8), 0.0);
447   EXPECT_FLOAT_EQ(histogram.num(9), 0.0);
448   EXPECT_FLOAT_EQ(histogram.num(10), 0.0);
449   EXPECT_FLOAT_EQ(histogram.num(11), 0.0);
450   EXPECT_FLOAT_EQ(histogram.num(12), 0.0);
451 
452   test_sampler->GetCell()->Add(100);
453   histogram = cell_reader.Read();
454   EXPECT_FLOAT_EQ(histogram.num(), 3.0);
455   EXPECT_FLOAT_EQ(histogram.sum(), 101.2);
456   EXPECT_FLOAT_EQ(histogram.sum_squares(), 10001.22);
457   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
458   EXPECT_FLOAT_EQ(histogram.num(1), 1.0);
459   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
460   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
461   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
462   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
463   EXPECT_FLOAT_EQ(histogram.num(6), 1.0);
464   EXPECT_FLOAT_EQ(histogram.num(7), 0.0);
465   EXPECT_FLOAT_EQ(histogram.num(8), 0.0);
466   EXPECT_FLOAT_EQ(histogram.num(9), 0.0);
467   EXPECT_FLOAT_EQ(histogram.num(10), 0.0);
468   EXPECT_FLOAT_EQ(histogram.num(11), 1.0);
469   EXPECT_FLOAT_EQ(histogram.num(12), 0.0);
470 }
471 
TEST(CellReaderTest,SamplerDeltaAndReadNoLabels)472 TEST(CellReaderTest, SamplerDeltaAndReadNoLabels) {
473   CellReader<Histogram> cell_reader("/tensorflow/monitoring/test/sampler");
474   Histogram histogram = cell_reader.Delta();
475   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
476   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
477   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.0);
478   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
479   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
480   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
481   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
482   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
483   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
484   EXPECT_FLOAT_EQ(histogram.num(6), 0.0);
485   EXPECT_FLOAT_EQ(histogram.num(7), 0.0);
486   EXPECT_FLOAT_EQ(histogram.num(8), 0.0);
487   EXPECT_FLOAT_EQ(histogram.num(9), 0.0);
488   EXPECT_FLOAT_EQ(histogram.num(10), 0.0);
489   EXPECT_FLOAT_EQ(histogram.num(11), 0.0);
490   EXPECT_FLOAT_EQ(histogram.num(12), 0.0);
491 
492   histogram = cell_reader.Read();
493   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
494   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
495   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.0);
496   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
497   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
498   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
499   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
500   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
501   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
502   EXPECT_FLOAT_EQ(histogram.num(6), 0.0);
503   EXPECT_FLOAT_EQ(histogram.num(7), 0.0);
504   EXPECT_FLOAT_EQ(histogram.num(8), 0.0);
505   EXPECT_FLOAT_EQ(histogram.num(9), 0.0);
506   EXPECT_FLOAT_EQ(histogram.num(10), 0.0);
507   EXPECT_FLOAT_EQ(histogram.num(11), 0.0);
508   EXPECT_FLOAT_EQ(histogram.num(12), 0.0);
509 
510   test_sampler->GetCell()->Add(0.1);
511   test_sampler->GetCell()->Add(0.1);
512   histogram = cell_reader.Delta();
513   EXPECT_FLOAT_EQ(histogram.num(), 2.0);
514   EXPECT_FLOAT_EQ(histogram.sum(), 0.2);
515   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.02);
516   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
517   EXPECT_FLOAT_EQ(histogram.num(1), 2.0);
518   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
519   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
520   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
521   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
522   EXPECT_FLOAT_EQ(histogram.num(6), 0.0);
523   EXPECT_FLOAT_EQ(histogram.num(7), 0.0);
524   EXPECT_FLOAT_EQ(histogram.num(8), 0.0);
525   EXPECT_FLOAT_EQ(histogram.num(9), 0.0);
526   EXPECT_FLOAT_EQ(histogram.num(10), 0.0);
527   EXPECT_FLOAT_EQ(histogram.num(11), 0.0);
528   EXPECT_FLOAT_EQ(histogram.num(12), 0.0);
529 
530   histogram = cell_reader.Read();
531   EXPECT_FLOAT_EQ(histogram.num(), 2.0);
532   EXPECT_FLOAT_EQ(histogram.sum(), 0.2);
533   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.02);
534   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
535   EXPECT_FLOAT_EQ(histogram.num(1), 2.0);
536   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
537   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
538   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
539   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
540   EXPECT_FLOAT_EQ(histogram.num(6), 0.0);
541   EXPECT_FLOAT_EQ(histogram.num(7), 0.0);
542   EXPECT_FLOAT_EQ(histogram.num(8), 0.0);
543   EXPECT_FLOAT_EQ(histogram.num(9), 0.0);
544   EXPECT_FLOAT_EQ(histogram.num(10), 0.0);
545   EXPECT_FLOAT_EQ(histogram.num(11), 0.0);
546   EXPECT_FLOAT_EQ(histogram.num(12), 0.0);
547 
548   test_sampler->GetCell()->Add(100);
549   test_sampler->GetCell()->Add(100);
550   histogram = cell_reader.Delta();
551   EXPECT_FLOAT_EQ(histogram.num(), 2.0);
552   EXPECT_FLOAT_EQ(histogram.sum(), 200);
553   EXPECT_FLOAT_EQ(histogram.sum_squares(), 20000);
554   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
555   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
556   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
557   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
558   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
559   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
560   EXPECT_FLOAT_EQ(histogram.num(6), 0.0);
561   EXPECT_FLOAT_EQ(histogram.num(7), 0.0);
562   EXPECT_FLOAT_EQ(histogram.num(8), 0.0);
563   EXPECT_FLOAT_EQ(histogram.num(9), 0.0);
564   EXPECT_FLOAT_EQ(histogram.num(10), 0.0);
565   EXPECT_FLOAT_EQ(histogram.num(11), 2.0);
566   EXPECT_FLOAT_EQ(histogram.num(12), 0.0);
567 
568   histogram = cell_reader.Read();
569   EXPECT_FLOAT_EQ(histogram.num(), 4.0);
570   EXPECT_FLOAT_EQ(histogram.sum(), 200.2);
571   EXPECT_FLOAT_EQ(histogram.sum_squares(), 20000.02);
572   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
573   EXPECT_FLOAT_EQ(histogram.num(1), 2.0);
574   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
575   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
576   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
577   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
578   EXPECT_FLOAT_EQ(histogram.num(6), 0.0);
579   EXPECT_FLOAT_EQ(histogram.num(7), 0.0);
580   EXPECT_FLOAT_EQ(histogram.num(8), 0.0);
581   EXPECT_FLOAT_EQ(histogram.num(9), 0.0);
582   EXPECT_FLOAT_EQ(histogram.num(10), 0.0);
583   EXPECT_FLOAT_EQ(histogram.num(11), 2.0);
584   EXPECT_FLOAT_EQ(histogram.num(12), 0.0);
585 }
586 
TEST(CellReaderTest,SamplerDeltaWithLabels)587 TEST(CellReaderTest, SamplerDeltaWithLabels) {
588   CellReader<Histogram> cell_reader(
589       "/tensorflow/monitoring/test/sampler_with_labels");
590   Histogram histogram = cell_reader.Delta("x1", "y1");
591   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
592   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
593   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.0);
594   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
595   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
596   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
597   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
598   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
599   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
600   histogram = cell_reader.Delta("x2", "y2");
601   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
602   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
603   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.0);
604   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
605   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
606   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
607   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
608   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
609   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
610 
611   test_sampler_with_labels->GetCell("x1", "y1")->Add(-100);
612   test_sampler_with_labels->GetCell("x1", "y1")->Add(-100);
613   histogram = cell_reader.Delta("x1", "y1");
614   EXPECT_FLOAT_EQ(histogram.num(), 2.0);
615   EXPECT_FLOAT_EQ(histogram.sum(), -200.0);
616   EXPECT_FLOAT_EQ(histogram.sum_squares(), 20000.0);
617   EXPECT_FLOAT_EQ(histogram.num(0), 2.0);
618   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
619   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
620   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
621   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
622   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
623   histogram = cell_reader.Delta("x2", "y2");
624   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
625   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
626   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.0);
627   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
628   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
629   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
630   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
631   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
632   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
633 
634   test_sampler_with_labels->GetCell("x2", "y2")->Add(100);
635   test_sampler_with_labels->GetCell("x2", "y2")->Add(100);
636   histogram = cell_reader.Delta("x1", "y1");
637   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
638   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
639   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.0);
640   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
641   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
642   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
643   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
644   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
645   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
646   histogram = cell_reader.Delta("x2", "y2");
647   EXPECT_FLOAT_EQ(histogram.num(), 2.0);
648   EXPECT_FLOAT_EQ(histogram.sum(), 200.0);
649   EXPECT_FLOAT_EQ(histogram.sum_squares(), 20000.0);
650   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
651   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
652   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
653   EXPECT_FLOAT_EQ(histogram.num(3), 2.0);
654   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
655   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
656 
657   test_sampler_with_labels->GetCell("x1", "y1")->Add(-100000000);
658   test_sampler_with_labels->GetCell("x2", "y2")->Add(100000000);
659   histogram = cell_reader.Delta("x1", "y1");
660   EXPECT_FLOAT_EQ(histogram.num(), 1.0);
661   EXPECT_FLOAT_EQ(histogram.sum(), -100000000);
662   EXPECT_FLOAT_EQ(histogram.num(0), 1.0);
663   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
664   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
665   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
666   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
667   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
668   histogram = cell_reader.Delta("x2", "y2");
669   EXPECT_FLOAT_EQ(histogram.num(), 1.0);
670   EXPECT_FLOAT_EQ(histogram.sum(), 100000000);
671   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
672   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
673   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
674   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
675   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
676   EXPECT_FLOAT_EQ(histogram.num(5), 1.0);
677 }
678 
TEST(CellReaderTest,SamplerReadWithLabels)679 TEST(CellReaderTest, SamplerReadWithLabels) {
680   CellReader<Histogram> cell_reader(
681       "/tensorflow/monitoring/test/sampler_with_labels");
682   Histogram histogram = cell_reader.Read("x1", "y1");
683   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
684   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
685   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.0);
686   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
687   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
688   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
689   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
690   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
691   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
692   histogram = cell_reader.Read("x2", "y2");
693   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
694   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
695   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.0);
696   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
697   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
698   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
699   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
700   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
701   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
702 
703   test_sampler_with_labels->GetCell("x1", "y1")->Add(-100);
704   test_sampler_with_labels->GetCell("x1", "y1")->Add(-100);
705   histogram = cell_reader.Read("x1", "y1");
706   EXPECT_FLOAT_EQ(histogram.num(), 2.0);
707   EXPECT_FLOAT_EQ(histogram.sum(), -200.0);
708   EXPECT_FLOAT_EQ(histogram.sum_squares(), 20000.0);
709   EXPECT_FLOAT_EQ(histogram.num(0), 2.0);
710   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
711   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
712   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
713   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
714   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
715   histogram = cell_reader.Read("x2", "y2");
716   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
717   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
718   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.0);
719   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
720   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
721   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
722   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
723   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
724   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
725 
726   test_sampler_with_labels->GetCell("x2", "y2")->Add(100);
727   test_sampler_with_labels->GetCell("x2", "y2")->Add(100);
728   histogram = cell_reader.Read("x1", "y1");
729   EXPECT_FLOAT_EQ(histogram.num(), 2.0);
730   EXPECT_FLOAT_EQ(histogram.sum(), -200.0);
731   EXPECT_FLOAT_EQ(histogram.sum_squares(), 20000.0);
732   EXPECT_FLOAT_EQ(histogram.num(0), 2.0);
733   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
734   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
735   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
736   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
737   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
738   histogram = cell_reader.Read("x2", "y2");
739   EXPECT_FLOAT_EQ(histogram.num(), 2.0);
740   EXPECT_FLOAT_EQ(histogram.sum(), 200.0);
741   EXPECT_FLOAT_EQ(histogram.sum_squares(), 20000.0);
742   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
743   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
744   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
745   EXPECT_FLOAT_EQ(histogram.num(3), 2.0);
746   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
747   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
748 
749   test_sampler_with_labels->GetCell("x1", "y1")->Add(-100000000);
750   test_sampler_with_labels->GetCell("x2", "y2")->Add(100000000);
751   histogram = cell_reader.Read("x1", "y1");
752   EXPECT_FLOAT_EQ(histogram.num(), 3.0);
753   EXPECT_FLOAT_EQ(histogram.sum(), -100000200);
754   EXPECT_FLOAT_EQ(histogram.num(0), 3.0);
755   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
756   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
757   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
758   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
759   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
760   histogram = cell_reader.Read("x2", "y2");
761   EXPECT_FLOAT_EQ(histogram.num(), 3.0);
762   EXPECT_FLOAT_EQ(histogram.sum(), 100000200);
763   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
764   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
765   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
766   EXPECT_FLOAT_EQ(histogram.num(3), 2.0);
767   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
768   EXPECT_FLOAT_EQ(histogram.num(5), 1.0);
769 }
770 
TEST(CellReaderTest,SamplerRepeatedReads)771 TEST(CellReaderTest, SamplerRepeatedReads) {
772   CellReader<Histogram> cell_reader(
773       "/tensorflow/monitoring/test/sampler_with_labels");
774   Histogram histogram = cell_reader.Read("x1", "y1");
775   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
776   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
777   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.0);
778   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
779   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
780   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
781   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
782   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
783   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
784   histogram = cell_reader.Read("x2", "y2");
785   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
786   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
787   EXPECT_FLOAT_EQ(histogram.sum_squares(), 0.0);
788   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
789   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
790   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
791   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
792   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
793   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
794 
795   test_sampler_with_labels->GetCell("x1", "y1")->Add(-100);
796   test_sampler_with_labels->GetCell("x1", "y1")->Add(-100);
797   test_sampler_with_labels->GetCell("x2", "y2")->Add(100);
798   test_sampler_with_labels->GetCell("x2", "y2")->Add(100);
799   test_sampler_with_labels->GetCell("x1", "y1")->Add(-100000000);
800   test_sampler_with_labels->GetCell("x2", "y2")->Add(100000000);
801   histogram = cell_reader.Delta("x1", "y1");
802   EXPECT_FLOAT_EQ(histogram.num(), 3.0);
803   EXPECT_FLOAT_EQ(histogram.sum(), -100000200);
804   EXPECT_FLOAT_EQ(histogram.num(0), 3.0);
805   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
806   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
807   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
808   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
809   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
810   histogram = cell_reader.Delta("x2", "y2");
811   EXPECT_FLOAT_EQ(histogram.num(), 3.0);
812   EXPECT_FLOAT_EQ(histogram.sum(), 100000200);
813   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
814   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
815   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
816   EXPECT_FLOAT_EQ(histogram.num(3), 2.0);
817   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
818   EXPECT_FLOAT_EQ(histogram.num(5), 1.0);
819 
820   histogram = cell_reader.Read("x1", "y1");
821   EXPECT_FLOAT_EQ(histogram.num(), 3.0);
822   EXPECT_FLOAT_EQ(histogram.sum(), -100000200);
823   EXPECT_FLOAT_EQ(histogram.num(0), 3.0);
824   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
825   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
826   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
827   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
828   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
829   histogram = cell_reader.Read("x2", "y2");
830   EXPECT_FLOAT_EQ(histogram.num(), 3.0);
831   EXPECT_FLOAT_EQ(histogram.sum(), 100000200);
832   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
833   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
834   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
835   EXPECT_FLOAT_EQ(histogram.num(3), 2.0);
836   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
837   EXPECT_FLOAT_EQ(histogram.num(5), 1.0);
838 
839   // Repeats the previous read. The values will stay the same, while the deltas
840   // will be 0.
841   histogram = cell_reader.Delta("x1", "y1");
842   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
843   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
844   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
845   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
846   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
847   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
848   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
849   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
850   histogram = cell_reader.Delta("x2", "y2");
851   EXPECT_FLOAT_EQ(histogram.num(), 0.0);
852   EXPECT_FLOAT_EQ(histogram.sum(), 0.0);
853   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
854   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
855   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
856   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
857   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
858   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
859 
860   histogram = cell_reader.Read("x1", "y1");
861   EXPECT_FLOAT_EQ(histogram.num(), 3.0);
862   EXPECT_FLOAT_EQ(histogram.sum(), -100000200);
863   EXPECT_FLOAT_EQ(histogram.num(0), 3.0);
864   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
865   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
866   EXPECT_FLOAT_EQ(histogram.num(3), 0.0);
867   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
868   EXPECT_FLOAT_EQ(histogram.num(5), 0.0);
869   histogram = cell_reader.Read("x2", "y2");
870   EXPECT_FLOAT_EQ(histogram.num(), 3.0);
871   EXPECT_FLOAT_EQ(histogram.sum(), 100000200);
872   EXPECT_FLOAT_EQ(histogram.num(0), 0.0);
873   EXPECT_FLOAT_EQ(histogram.num(1), 0.0);
874   EXPECT_FLOAT_EQ(histogram.num(2), 0.0);
875   EXPECT_FLOAT_EQ(histogram.num(3), 2.0);
876   EXPECT_FLOAT_EQ(histogram.num(4), 0.0);
877   EXPECT_FLOAT_EQ(histogram.num(5), 1.0);
878 }
879 
TEST(CellReaderTest,IntGaugeRead)880 TEST(CellReaderTest, IntGaugeRead) {
881   CellReader<int64_t> cell_reader("/tensorflow/monitoring/test/int_gauge");
882   EXPECT_EQ(cell_reader.Read(), 0);
883 
884   test_int_gauge->GetCell()->Set(100);
885   EXPECT_EQ(cell_reader.Read(), 100);
886 
887   test_int_gauge->GetCell()->Set(-100);
888   EXPECT_EQ(cell_reader.Read(), -100);
889 
890   test_int_gauge->GetCell()->Set(0);
891   EXPECT_EQ(cell_reader.Read(), 0);
892 }
893 
TEST(CellReaderTest,IntGaugeReadWithLabels)894 TEST(CellReaderTest, IntGaugeReadWithLabels) {
895   CellReader<int64_t> cell_reader(
896       "/tensorflow/monitoring/test/int_gauge_with_labels");
897   EXPECT_EQ(cell_reader.Read("x1", "y1"), 0);
898   EXPECT_EQ(cell_reader.Read("x2", "y2"), 0);
899 
900   test_int_gauge_with_labels->GetCell("x1", "y1")->Set(100000);
901   EXPECT_EQ(cell_reader.Read("x1", "y1"), 100000);
902   EXPECT_EQ(cell_reader.Read("x2", "y2"), 0);
903 
904   test_int_gauge_with_labels->GetCell("x2", "y2")->Set(-100000);
905   EXPECT_EQ(cell_reader.Read("x1", "y1"), 100000);
906   EXPECT_EQ(cell_reader.Read("x2", "y2"), -100000);
907 
908   test_int_gauge_with_labels->GetCell("x1", "y1")->Set(-100000);
909   test_int_gauge_with_labels->GetCell("x2", "y2")->Set(100000);
910   EXPECT_EQ(cell_reader.Read("x1", "y1"), -100000);
911   EXPECT_EQ(cell_reader.Read("x2", "y2"), 100000);
912 
913   test_int_gauge_with_labels->GetCell("x1", "y1")->Set(0);
914   EXPECT_EQ(cell_reader.Read("x1", "y1"), 0);
915   EXPECT_EQ(cell_reader.Read("x2", "y2"), 100000);
916 }
917 
TEST(CellReaderTest,IntGaugeRepeatedSetAndRead)918 TEST(CellReaderTest, IntGaugeRepeatedSetAndRead) {
919   CellReader<int64_t> cell_reader(
920       "/tensorflow/monitoring/test/int_gauge_with_labels");
921 
922   test_int_gauge_with_labels->GetCell("x1", "y1")->Set(-1);
923   test_int_gauge_with_labels->GetCell("x2", "y2")->Set(1);
924   test_int_gauge_with_labels->GetCell("x1", "y1")->Set(1);
925   test_int_gauge_with_labels->GetCell("x2", "y2")->Set(-1);
926   EXPECT_EQ(cell_reader.Read("x1", "y1"), 1);
927   EXPECT_EQ(cell_reader.Read("x2", "y2"), -1);
928   EXPECT_EQ(cell_reader.Read("x1", "y1"), 1);
929   EXPECT_EQ(cell_reader.Read("x2", "y2"), -1);
930   EXPECT_EQ(cell_reader.Read("x1", "y1"), 1);
931   EXPECT_EQ(cell_reader.Read("x2", "y2"), -1);
932 
933   test_int_gauge_with_labels->GetCell("x1", "y1")->Set(0);
934   test_int_gauge_with_labels->GetCell("x2", "y2")->Set(500);
935   test_int_gauge_with_labels->GetCell("x1", "y1")->Set(0);
936   test_int_gauge_with_labels->GetCell("x2", "y2")->Set(-500);
937   EXPECT_EQ(cell_reader.Read("x1", "y1"), 0);
938   EXPECT_EQ(cell_reader.Read("x2", "y2"), -500);
939   EXPECT_EQ(cell_reader.Read("x1", "y1"), 0);
940   EXPECT_EQ(cell_reader.Read("x2", "y2"), -500);
941   EXPECT_EQ(cell_reader.Read("x1", "y1"), 0);
942   EXPECT_EQ(cell_reader.Read("x2", "y2"), -500);
943 }
944 
TEST(CellReaderTest,StringGaugeRead)945 TEST(CellReaderTest, StringGaugeRead) {
946   CellReader<std::string> cell_reader(
947       "/tensorflow/monitoring/test/string_gauge");
948   EXPECT_EQ(cell_reader.Read(), "");
949 
950   test_string_gauge->GetCell()->Set("gauge value");
951   EXPECT_EQ(cell_reader.Read(), "gauge value");
952 
953   test_string_gauge->GetCell()->Set("Updated gauge value");
954   EXPECT_EQ(cell_reader.Read(), "Updated gauge value");
955 
956   test_string_gauge->GetCell()->Set("");
957   EXPECT_EQ(cell_reader.Read(), "");
958 }
959 
TEST(CellReaderTest,StringGaugeReadWithLabels)960 TEST(CellReaderTest, StringGaugeReadWithLabels) {
961   CellReader<std::string> cell_reader(
962       "/tensorflow/monitoring/test/string_gauge_with_labels");
963   EXPECT_EQ(cell_reader.Read("x1", "y1"), "");
964   EXPECT_EQ(cell_reader.Read("x2", "y2"), "");
965 
966   test_string_gauge_with_labels->GetCell("x1", "y1")->Set("Value 1");
967   EXPECT_EQ(cell_reader.Read("x1", "y1"), "Value 1");
968   EXPECT_EQ(cell_reader.Read("x2", "y2"), "");
969 
970   test_string_gauge_with_labels->GetCell("x2", "y2")->Set("Value 2");
971   EXPECT_EQ(cell_reader.Read("x1", "y1"), "Value 1");
972   EXPECT_EQ(cell_reader.Read("x2", "y2"), "Value 2");
973 
974   test_string_gauge_with_labels->GetCell("x1", "y1")->Set("Value 3");
975   test_string_gauge_with_labels->GetCell("x2", "y2")->Set("Value 3");
976   EXPECT_EQ(cell_reader.Read("x1", "y1"), "Value 3");
977   EXPECT_EQ(cell_reader.Read("x2", "y2"), "Value 3");
978 
979   test_string_gauge_with_labels->GetCell("x1", "y1")->Set("");
980   test_string_gauge_with_labels->GetCell("x2", "y2")->Set("");
981   EXPECT_EQ(cell_reader.Read("x1", "y1"), "");
982   EXPECT_EQ(cell_reader.Read("x2", "y2"), "");
983 }
984 
TEST(CellReaderTest,StringGaugeRepeatedSetAndRead)985 TEST(CellReaderTest, StringGaugeRepeatedSetAndRead) {
986   CellReader<std::string> cell_reader(
987       "/tensorflow/monitoring/test/string_gauge_with_labels");
988   EXPECT_EQ(cell_reader.Read("x1", "y1"), "");
989   EXPECT_EQ(cell_reader.Read("x2", "y2"), "");
990 
991   test_string_gauge_with_labels->GetCell("x1", "y1")->Set("Value 1");
992   test_string_gauge_with_labels->GetCell("x2", "y2")->Set("Value 2");
993   test_string_gauge_with_labels->GetCell("x1", "y1")->Set("Value 3");
994   test_string_gauge_with_labels->GetCell("x2", "y2")->Set("Value 3");
995   EXPECT_EQ(cell_reader.Read("x1", "y1"), "Value 3");
996   EXPECT_EQ(cell_reader.Read("x2", "y2"), "Value 3");
997   EXPECT_EQ(cell_reader.Read("x1", "y1"), "Value 3");
998   EXPECT_EQ(cell_reader.Read("x2", "y2"), "Value 3");
999   EXPECT_EQ(cell_reader.Read("x1", "y1"), "Value 3");
1000   EXPECT_EQ(cell_reader.Read("x2", "y2"), "Value 3");
1001 
1002   test_string_gauge_with_labels->GetCell("x1", "y1")->Set("");
1003   test_string_gauge_with_labels->GetCell("x2", "y2")->Set("");
1004   test_string_gauge_with_labels->GetCell("x1", "y1")->Set("-10");
1005   test_string_gauge_with_labels->GetCell("x2", "y2")->Set("-10");
1006   EXPECT_EQ(cell_reader.Read("x1", "y1"), "-10");
1007   EXPECT_EQ(cell_reader.Read("x2", "y2"), "-10");
1008   EXPECT_EQ(cell_reader.Read("x1", "y1"), "-10");
1009   EXPECT_EQ(cell_reader.Read("x2", "y2"), "-10");
1010   EXPECT_EQ(cell_reader.Read("x1", "y1"), "-10");
1011   EXPECT_EQ(cell_reader.Read("x2", "y2"), "-10");
1012 }
1013 
TEST(CellReaderTest,BoolGaugeRead)1014 TEST(CellReaderTest, BoolGaugeRead) {
1015   CellReader<bool> cell_reader("/tensorflow/monitoring/test/bool_gauge");
1016   EXPECT_EQ(cell_reader.Read(), false);
1017 
1018   test_bool_gauge->GetCell()->Set(true);
1019   EXPECT_EQ(cell_reader.Read(), true);
1020 
1021   test_bool_gauge->GetCell()->Set(false);
1022   EXPECT_EQ(cell_reader.Read(), false);
1023 }
1024 
TEST(CellReaderTest,BoolGaugeReadWithLabels)1025 TEST(CellReaderTest, BoolGaugeReadWithLabels) {
1026   CellReader<bool> cell_reader(
1027       "/tensorflow/monitoring/test/bool_gauge_with_labels");
1028   EXPECT_EQ(cell_reader.Read("x1", "y1"), false);
1029   EXPECT_EQ(cell_reader.Read("x2", "y2"), false);
1030 
1031   test_bool_gauge_with_labels->GetCell("x1", "y1")->Set(true);
1032   EXPECT_EQ(cell_reader.Read("x1", "y1"), true);
1033   EXPECT_EQ(cell_reader.Read("x2", "y2"), false);
1034 
1035   test_bool_gauge_with_labels->GetCell("x2", "y2")->Set(true);
1036   EXPECT_EQ(cell_reader.Read("x1", "y1"), true);
1037   EXPECT_EQ(cell_reader.Read("x2", "y2"), true);
1038 
1039   test_bool_gauge_with_labels->GetCell("x1", "y1")->Set(false);
1040   test_bool_gauge_with_labels->GetCell("x2", "y2")->Set(true);
1041   EXPECT_EQ(cell_reader.Read("x1", "y1"), false);
1042   EXPECT_EQ(cell_reader.Read("x2", "y2"), true);
1043 
1044   test_bool_gauge_with_labels->GetCell("x1", "y1")->Set(false);
1045   test_bool_gauge_with_labels->GetCell("x2", "y2")->Set(false);
1046   EXPECT_EQ(cell_reader.Read("x1", "y1"), false);
1047   EXPECT_EQ(cell_reader.Read("x2", "y2"), false);
1048 }
1049 
TEST(CellReaderTest,BoolGaugeRepeatedSetAndRead)1050 TEST(CellReaderTest, BoolGaugeRepeatedSetAndRead) {
1051   CellReader<bool> cell_reader(
1052       "/tensorflow/monitoring/test/bool_gauge_with_labels");
1053   EXPECT_EQ(cell_reader.Read("x1", "y1"), false);
1054   EXPECT_EQ(cell_reader.Read("x2", "y2"), false);
1055 
1056   test_bool_gauge_with_labels->GetCell("x1", "y1")->Set(true);
1057   test_bool_gauge_with_labels->GetCell("x2", "y2")->Set(false);
1058   test_bool_gauge_with_labels->GetCell("x1", "y1")->Set(true);
1059   test_bool_gauge_with_labels->GetCell("x2", "y2")->Set(true);
1060   EXPECT_EQ(cell_reader.Read("x1", "y1"), true);
1061   EXPECT_EQ(cell_reader.Read("x2", "y2"), true);
1062   EXPECT_EQ(cell_reader.Read("x1", "y1"), true);
1063   EXPECT_EQ(cell_reader.Read("x2", "y2"), true);
1064   EXPECT_EQ(cell_reader.Read("x1", "y1"), true);
1065   EXPECT_EQ(cell_reader.Read("x2", "y2"), true);
1066 
1067   test_bool_gauge_with_labels->GetCell("x1", "y1")->Set(false);
1068   test_bool_gauge_with_labels->GetCell("x2", "y2")->Set(true);
1069   test_bool_gauge_with_labels->GetCell("x1", "y1")->Set(false);
1070   test_bool_gauge_with_labels->GetCell("x2", "y2")->Set(true);
1071   EXPECT_EQ(cell_reader.Read("x1", "y1"), false);
1072   EXPECT_EQ(cell_reader.Read("x2", "y2"), true);
1073   EXPECT_EQ(cell_reader.Read("x1", "y1"), false);
1074   EXPECT_EQ(cell_reader.Read("x2", "y2"), true);
1075   EXPECT_EQ(cell_reader.Read("x1", "y1"), false);
1076   EXPECT_EQ(cell_reader.Read("x2", "y2"), true);
1077 }
1078 
TEST(CellReaderTest,PercentilesDeltaNoLabels)1079 TEST(CellReaderTest, PercentilesDeltaNoLabels) {
1080   CellReader<Percentiles> cell_reader(
1081       "/tensorflow/monitoring/test/percentiles");
1082   Percentiles percentiles = cell_reader.Delta();
1083   EXPECT_EQ(percentiles.num(), 0);
1084   EXPECT_FLOAT_EQ(percentiles.sum(), 0.0);
1085 
1086   test_percentiles->GetCell()->Add(1.0);
1087   percentiles = cell_reader.Delta();
1088   EXPECT_EQ(percentiles.num(), 1);
1089   EXPECT_FLOAT_EQ(percentiles.sum(), 1.0);
1090 
1091   test_percentiles->GetCell()->Add(-10.0);
1092   percentiles = cell_reader.Delta();
1093   EXPECT_EQ(percentiles.num(), 1);
1094   EXPECT_FLOAT_EQ(percentiles.sum(), -10.0);
1095 
1096   test_percentiles->GetCell()->Add(1000.0);
1097   percentiles = cell_reader.Delta();
1098   EXPECT_EQ(percentiles.num(), 1);
1099   EXPECT_FLOAT_EQ(percentiles.sum(), 1000.0);
1100 }
1101 
TEST(CellReaderTest,PercentilesReadNoLabels)1102 TEST(CellReaderTest, PercentilesReadNoLabels) {
1103   CellReader<Percentiles> cell_reader(
1104       "/tensorflow/monitoring/test/percentiles");
1105   Percentiles percentiles = cell_reader.Read();
1106   EXPECT_EQ(percentiles.num(), 0);
1107   EXPECT_FLOAT_EQ(percentiles.sum(), 0.0);
1108 
1109   test_percentiles->GetCell()->Add(1.0);
1110   percentiles = cell_reader.Read();
1111   EXPECT_EQ(percentiles.num(), 1);
1112   EXPECT_FLOAT_EQ(percentiles.sum(), 1.0);
1113 
1114   test_percentiles->GetCell()->Add(-10.0);
1115   percentiles = cell_reader.Read();
1116   EXPECT_EQ(percentiles.num(), 2);
1117   EXPECT_FLOAT_EQ(percentiles.sum(), -9.0);
1118 
1119   test_percentiles->GetCell()->Add(1000.0);
1120   percentiles = cell_reader.Read();
1121   EXPECT_EQ(percentiles.num(), 3);
1122   EXPECT_FLOAT_EQ(percentiles.sum(), 991.0);
1123 }
1124 
TEST(CellReaderTest,PercentilesWithLabels)1125 TEST(CellReaderTest, PercentilesWithLabels) {
1126   CellReader<Percentiles> cell_reader(
1127       "/tensorflow/monitoring/test/percentiles_with_labels");
1128   Percentiles percentiles = cell_reader.Delta("x1", "y1");
1129   EXPECT_EQ(percentiles.num(), 0);
1130   EXPECT_FLOAT_EQ(percentiles.sum(), 0.0);
1131   percentiles = cell_reader.Delta("x2", "y2");
1132   EXPECT_EQ(percentiles.num(), 0);
1133   EXPECT_FLOAT_EQ(percentiles.sum(), 0.0);
1134   percentiles = cell_reader.Read("x1", "y1");
1135   EXPECT_EQ(percentiles.num(), 0);
1136   EXPECT_FLOAT_EQ(percentiles.sum(), 0.0);
1137   percentiles = cell_reader.Read("x2", "y2");
1138   EXPECT_EQ(percentiles.num(), 0);
1139   EXPECT_FLOAT_EQ(percentiles.sum(), 0.0);
1140 
1141   test_percentiles_with_labels->GetCell("x1", "y1")->Add(-1.0);
1142   percentiles = cell_reader.Delta("x1", "y1");
1143   EXPECT_EQ(percentiles.num(), 1);
1144   EXPECT_FLOAT_EQ(percentiles.sum(), -1.0);
1145   percentiles = cell_reader.Delta("x2", "y2");
1146   EXPECT_EQ(percentiles.num(), 0);
1147   EXPECT_FLOAT_EQ(percentiles.sum(), 0.0);
1148   percentiles = cell_reader.Read("x1", "y1");
1149   EXPECT_EQ(percentiles.num(), 1);
1150   EXPECT_FLOAT_EQ(percentiles.sum(), -1.0);
1151   percentiles = cell_reader.Read("x2", "y2");
1152   EXPECT_EQ(percentiles.num(), 0);
1153   EXPECT_FLOAT_EQ(percentiles.sum(), 0.0);
1154 
1155   test_percentiles_with_labels->GetCell("x2", "y2")->Add(1.0);
1156   percentiles = cell_reader.Delta("x1", "y1");
1157   EXPECT_EQ(percentiles.num(), 0);
1158   EXPECT_FLOAT_EQ(percentiles.sum(), 0.0);
1159   percentiles = cell_reader.Delta("x2", "y2");
1160   EXPECT_EQ(percentiles.num(), 1);
1161   EXPECT_FLOAT_EQ(percentiles.sum(), 1.0);
1162   percentiles = cell_reader.Read("x1", "y1");
1163   EXPECT_EQ(percentiles.num(), 1);
1164   EXPECT_FLOAT_EQ(percentiles.sum(), -1.0);
1165   percentiles = cell_reader.Read("x2", "y2");
1166   EXPECT_EQ(percentiles.num(), 1);
1167   EXPECT_FLOAT_EQ(percentiles.sum(), 1.0);
1168 
1169   test_percentiles_with_labels->GetCell("x1", "y1")->Add(100.0);
1170   test_percentiles_with_labels->GetCell("x2", "y2")->Add(-100.0);
1171   percentiles = cell_reader.Delta("x1", "y1");
1172   EXPECT_EQ(percentiles.num(), 1);
1173   EXPECT_FLOAT_EQ(percentiles.sum(), 100.0);
1174   percentiles = cell_reader.Delta("x2", "y2");
1175   EXPECT_EQ(percentiles.num(), 1);
1176   EXPECT_FLOAT_EQ(percentiles.sum(), -100.0);
1177   percentiles = cell_reader.Read("x1", "y1");
1178   EXPECT_EQ(percentiles.num(), 2);
1179   EXPECT_FLOAT_EQ(percentiles.sum(), 99.0);
1180   percentiles = cell_reader.Read("x2", "y2");
1181   EXPECT_EQ(percentiles.num(), 2);
1182   EXPECT_FLOAT_EQ(percentiles.sum(), -99.0);
1183 }
1184 
TEST(CellReaderTest,PercentilesRepeatedSetAndRead)1185 TEST(CellReaderTest, PercentilesRepeatedSetAndRead) {
1186   CellReader<Percentiles> cell_reader(
1187       "/tensorflow/monitoring/test/percentiles_with_labels");
1188   Percentiles percentiles = cell_reader.Delta("x1", "y1");
1189   EXPECT_EQ(percentiles.num(), 0);
1190   EXPECT_FLOAT_EQ(percentiles.sum(), 0.0);
1191   percentiles = cell_reader.Delta("x1", "y1");
1192   EXPECT_EQ(percentiles.num(), 0);
1193   EXPECT_FLOAT_EQ(percentiles.sum(), 0.0);
1194 
1195   test_percentiles_with_labels->GetCell("x1", "y1")->Add(1.0);
1196   test_percentiles_with_labels->GetCell("x2", "y2")->Add(-1.0);
1197   test_percentiles_with_labels->GetCell("x1", "y1")->Add(10.0);
1198   test_percentiles_with_labels->GetCell("x2", "y2")->Add(-10.0);
1199   test_percentiles_with_labels->GetCell("x1", "y1")->Add(100.0);
1200   test_percentiles_with_labels->GetCell("x2", "y2")->Add(-100.0);
1201 
1202   percentiles = cell_reader.Delta("x1", "y1");
1203   EXPECT_EQ(percentiles.num(), 3);
1204   EXPECT_FLOAT_EQ(percentiles.sum(), 111.0);
1205   percentiles = cell_reader.Read("x1", "y1");
1206   EXPECT_EQ(percentiles.num(), 3);
1207   EXPECT_FLOAT_EQ(percentiles.sum(), 111.0);
1208 
1209   // Repeats the previous read. The values will stay the same, while the deltas
1210   // will be 0.
1211   percentiles = cell_reader.Delta("x1", "y1");
1212   EXPECT_EQ(percentiles.num(), 0);
1213   EXPECT_FLOAT_EQ(percentiles.sum(), 0);
1214   percentiles = cell_reader.Read("x1", "y1");
1215   EXPECT_EQ(percentiles.num(), 3);
1216   EXPECT_FLOAT_EQ(percentiles.sum(), 111.0);
1217 
1218   percentiles = cell_reader.Delta("x2", "y2");
1219   EXPECT_EQ(percentiles.num(), 3);
1220   EXPECT_FLOAT_EQ(percentiles.sum(), -111.0);
1221   percentiles = cell_reader.Read("x2", "y2");
1222   EXPECT_EQ(percentiles.num(), 3);
1223   EXPECT_FLOAT_EQ(percentiles.sum(), -111.0);
1224 
1225   // Repeats the previous read. The values will stay the same, while the deltas
1226   // will be 0.
1227   percentiles = cell_reader.Delta("x2", "y2");
1228   EXPECT_EQ(percentiles.num(), 0);
1229   EXPECT_FLOAT_EQ(percentiles.sum(), 0);
1230   percentiles = cell_reader.Read("x2", "y2");
1231   EXPECT_EQ(percentiles.num(), 3);
1232   EXPECT_FLOAT_EQ(percentiles.sum(), -111.0);
1233 }
1234 
1235 #ifdef GTEST_HAS_DEATH_TEST
TEST(CellReaderTest,WrongNumberOfLabels)1236 TEST(CellReaderTest, WrongNumberOfLabels) {
1237   CellReader<int64_t> cell_reader("/tensorflow/monitoring/test/counter");
1238   EXPECT_EQ(cell_reader.Read(), 0);
1239   EXPECT_DEATH(cell_reader.Read("label1"), "has 0 labels");
1240   EXPECT_DEATH(cell_reader.Read("label1", "label2"), "has 0 labels");
1241   EXPECT_DEATH(cell_reader.Read("label1", "label2", "label3"), "has 0 labels");
1242 
1243   CellReader<int64_t> cell_reader_with_labels(
1244       "/tensorflow/monitoring/test/counter_with_labels");
1245   EXPECT_DEATH(cell_reader_with_labels.Read(), "has 2 labels");
1246   EXPECT_DEATH(cell_reader_with_labels.Read("label1"), "has 2 labels");
1247   EXPECT_EQ(cell_reader_with_labels.Read("label1", "label2"), 0);
1248   EXPECT_DEATH(cell_reader_with_labels.Read("label1", "label2", "label3"),
1249                "has 2 labels");
1250 }
1251 
TEST(CellReaderTest,MetricIsNotFound)1252 TEST(CellReaderTest, MetricIsNotFound) {
1253   CellReader<int64_t> cell_reader("/metric/does/not/exist");
1254   CellReader<int64_t> empty_cell_reader("");
1255   EXPECT_DEATH(cell_reader.Read(), "Metric descriptor is not found");
1256   EXPECT_DEATH(empty_cell_reader.Read(), "Metric descriptor is not found");
1257 }
1258 
TEST(CellReaderTest,StringGaugeDelta)1259 TEST(CellReaderTest, StringGaugeDelta) {
1260   CellReader<std::string> cell_reader(
1261       "/tensorflow/monitoring/test/string_gauge");
1262   CellReader<std::string> cell_reader_with_labels(
1263       "/tensorflow/monitoring/test/string_gauge_with_labels");
1264   EXPECT_DEATH(cell_reader.Delta(), "Please use `Read` instead.");
1265   EXPECT_DEATH(cell_reader_with_labels.Delta("x", "y"),
1266                "Please use `Read` instead.");
1267 }
1268 
TEST(CellReaderTest,BoolGaugeDelta)1269 TEST(CellReaderTest, BoolGaugeDelta) {
1270   CellReader<bool> cell_reader("/tensorflow/monitoring/test/bool_gauge");
1271   CellReader<bool> cell_reader_with_labels(
1272       "/tensorflow/monitoring/test/bool_gauge_with_labels");
1273   EXPECT_DEATH(cell_reader.Delta(), "Please use `Read` instead.");
1274   EXPECT_DEATH(cell_reader_with_labels.Delta("x", "y"),
1275                "Please use `Read` instead.");
1276 }
1277 
TEST(CellReaderTest,InvalidType)1278 TEST(CellReaderTest, InvalidType) {
1279   CellReader<std::vector<int>> cell_reader(
1280       "/tensorflow/monitoring/test/counter");
1281   CellReader<std::vector<int>> cell_reader_with_labels(
1282       "/tensorflow/monitoring/test/counter_with_labels");
1283   EXPECT_DEATH(cell_reader.Read(),
1284                "Tensorflow CellReader does not support type");
1285   EXPECT_DEATH(cell_reader_with_labels.Delta("x", "y"),
1286                "Tensorflow CellReader does not support type");
1287 
1288   test_counter->GetCell()->IncrementBy(1);
1289   test_counter_with_labels->GetCell("x", "y")->IncrementBy(1);
1290   EXPECT_DEATH(cell_reader.Read(),
1291                "Tensorflow CellReader does not support type");
1292   EXPECT_DEATH(cell_reader_with_labels.Delta("x", "y"),
1293                "Tensorflow CellReader does not support type");
1294 }
1295 #endif
1296 
1297 }  // namespace
1298 }  // namespace testing
1299 }  // namespace monitoring
1300 }  // namespace tensorflow
1301