File: ut_buffer.cpp

package info (click to toggle)
vzlogger 0.8.9-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,140 kB
  • sloc: cpp: 12,020; sh: 331; ansic: 157; makefile: 25
file content (98 lines) | stat: -rw-r--r-- 2,135 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*
 * unit tests for Meter.cpp
 * Author: Matthias Behr, 2014
 */

#include "gtest/gtest.h"

#include <Buffer.hpp>

TEST(buffer, buffer_agg_avg) {
	Buffer buf;
	buf.set_aggmode(Buffer::AVG);

	ReadingIdentifier::Ptr pRid;
	struct timeval t1;
	t1.tv_sec = 1;
	t1.tv_usec = 0;
	{
		Reading r1(1.0, t1, pRid);
		buf.push(r1);

		buf.aggregate(0, false);
		// now assert exact one, not deleted:
		ASSERT_EQ(buf.size(), (size_t)1);
		Reading &r = *buf.begin();
		ASSERT_TRUE(!r.deleted());
		// first case: no prev. value, just one data -> return value as AVG.
		ASSERT_EQ(r.value(), 1.0);
		r.mark_delete();
	}
	// now add a 2nd value:
	{
		t1.tv_sec = 2;
		Reading r2(2.0, t1, pRid);
		buf.push(r2);
		buf.aggregate(0, false);
		buf.clean();
		ASSERT_EQ(buf.size(), (size_t)1);
		Reading &r = *buf.begin();
		ASSERT_TRUE(!r.deleted());
		// 2nd case: prev. value (1.0 at 1s), just one new data (2.0 at 2s)-> return 1.0 as AVG (2.0
		// has no time yet!)
		ASSERT_EQ(r.value(), 1.0);
		r.mark_delete();
	}
	// now add 2 values:
	{
		t1.tv_sec = 4;
		Reading r3(3.0, t1, pRid);
		buf.push(r3);
		t1.tv_sec = 7;
		Reading r4(4.0, t1, pRid);
		buf.push(r4);

		buf.aggregate(0, false);
		buf.clean();
		ASSERT_EQ(buf.size(), (size_t)1);
		Reading &r = *buf.begin();
		ASSERT_TRUE(!r.deleted());
		// 3rd case: prev. value (2.0 at 2s), two new data (3.0 at 4s and 4.0 at 7s)-> return
		// (2*2+3*3)/5 as AVG (4.0 has no time yet!)
		ASSERT_EQ(((2.0 * 2.0) + (3.0 * 3.0)) / 5.0, r.value());
		r.mark_delete();
	}
}

TEST(buffer, clean) {
	// call clean on empty buffer:
	Buffer buf;
	buf.clean();

	Buffer buf2;
	buf2.clean(false);

	// add one item:
	ReadingIdentifier::Ptr pRid;
	struct timeval t1;
	t1.tv_sec = 1;
	t1.tv_usec = 0;
	Reading r1(1.0, t1, pRid);

	buf.push(r1);
	ASSERT_EQ(1ul, buf.size());

	// call default clean() that does only remove deleted items:
	buf.clean();
	ASSERT_EQ(1ul, buf.size());

	(*buf.begin()).mark_delete();
	// call default clean() that does only remove deleted items:
	buf.clean();
	ASSERT_EQ(0ul, buf.size());

	Reading r2(2.0, t1, pRid);
	buf.push(r2);
	buf.clean(false);
	ASSERT_EQ(0ul, buf.size());
}