3 # -*- coding: utf-8 -*-
8 __author__
= "rlazo.paz@gmail.com (Rodrigo Lazo)"
11 from datastore
import DataEntry
, DataPoint
12 from operator
import attrgetter
, itemgetter
15 class TestDataEntry(unittest
.TestCase
):
17 self
.entry
= DataEntry()
19 def test_invalid_single_inserts(self
):
20 self
.assertFalse(self
.entry
.insert_point(-1209, 2),
21 "Negative timestamp accepted.")
22 self
.assertFalse(self
.entry
.insert_point(12.1, 34830923),
23 "Float timestamp accepted.")
24 self
.assertFalse(self
.entry
.insert_point("23", 34830923),
25 "Str timestamp accepted.")
26 self
.assertEqual(len(self
.entry
.get_all()), 0,
27 "Only invalid inserts tried, it must be empty.")
29 def test_invalid_batch_inserts(self
):
30 self
.assertFalse(self
.entry
.insert_points([(-1209, 2)]),
31 "Negative timestamp accepted.")
32 self
.assertEqual(len(self
.entry
.get_all()), 0,
33 "Only invalid inserts tried, it must be empty.")
34 data_points
= ((232, 2), (-193, 3), ("st", 5), (182, 4), (2.1, 4))
35 self
.assertFalse(self
.entry
.insert_points(data_points
),
36 "Invalid timestamps accepted.")
37 self
.assertEqual(len(self
.entry
.get_all()), 2,
38 "Only two valid entries submitted.")
40 def test_valid_single_insert(self
):
41 self
.assertTrue(self
.entry
.insert_point(23, 393),
42 "Valid value rejected.")
43 self
.assertTrue(self
.entry
.insert_point(0, "no problemo"),
44 "Valid value rejected.")
45 self
.assertEqual(len(self
.entry
.get_all()), 2,
46 "Lenght doesn't match, only 2 insertions")
48 def test_valid_batch_inserts(self
):
49 values
= ((19282, "x"), (00, 338), (5, 0.53))
50 self
.assertTrue(self
.entry
.insert_points(values
),
51 "Valid values rejected.")
52 self
.assertEqual(len(self
.entry
.get_all()), len(values
),
53 "Lenght doesn't match, 5 insertions")
55 def test_get_latest(self
):
56 values
= ((2, "x"), (48281, "m"), (100000000, 2), (1, "sor"))
57 latest
= max(values
, key
=itemgetter(0))
58 self
.entry
.insert_points(values
)
59 self
.assertEqual(self
.entry
.get_latest().timestamp
, latest
[0],
60 "latest value must be %s:%s" % latest
)
62 def test_points_sorted(self
):
63 values
= ((2, "x"), (48281, "m"), (100000000, 2), (1, "sor"))
64 self
.entry
.insert_points(values
)
65 self
.assertTrue(is_sorted(self
.entry
.get_all(),
66 func
=attrgetter("timestamp")),
67 "Points are not sorted by timestamp.")
69 def test_get_since(self
):
70 values
= ((10, None), (30, None), (50, None), (60, None), (70, None))
71 points
= [DataPoint(*i
) for i
in values
]
73 self
.entry
.insert_points(values
)
74 result
= self
.entry
.get_since(100000)
75 self
.assertFalse(result
, "Timestamp in the future should return empty,"\
76 " got list of size %d" % len(result
))
77 result
= self
.entry
.get_since(70.1)
78 self
.assertFalse(result
, "Timestamp in the future should return empty,"\
79 " got list of size %d" % len(result
))
81 result
= self
.entry
.get_since(0)
82 self
.assertEquals(result
, points
,
83 "Timestamp 0 should return all points,"\
84 " got %s" % str(result
))
86 self
.assertEquals(self
.entry
.get_since(10), points
)
87 self
.assertEquals(self
.entry
.get_since(11), points
[1:])
88 self
.assertEquals(self
.entry
.get_since(29), points
[1:])
89 self
.assertEquals(self
.entry
.get_since(30), points
[1:])
90 self
.assertEquals(self
.entry
.get_since(40), points
[2:])
91 self
.assertEquals(self
.entry
.get_since(70), points
[4:])
94 def is_sorted(container
, func
=None):
96 return all(func(container
[i
]) <= func(container
[i
+1])
97 for i
in xrange(len(container
)-1))
98 return all(container
[i
] <= container
[i
+1]
99 for i
in xrange(len(container
)-1))
102 if __name__
== '__main__':