blob: 228b7d8f88a302ac9aee9e9f35c1a90cee2c3e14 [file] [log] [blame]
Javi Merinoe4d10d72015-06-22 16:43:04 +01001# $Copyright:
2# ----------------------------------------------------------------
3# This confidential and proprietary software may be used only as
4# authorised by a licensing agreement from ARM Limited
5# (C) COPYRIGHT 2015 ARM Limited
6# ALL RIGHTS RESERVED
7# The entire notice above must be reproduced on all authorised
8# copies and copies may only be made to the extent permitted
9# by a licensing agreement from ARM Limited.
10# ----------------------------------------------------------------
11# File: test_constraint.py
12# ----------------------------------------------------------------
13# $
14#
15
16import pandas as pd
17import unittest
18
19from cr2.plotter import AttrConf
20from cr2.plotter.Constraint import ConstraintManager
21
22class TestConstraintManager(unittest.TestCase):
23 """Test cr2.plotter.ConstraintManager"""
24
25 def __init__(self, *args, **kwargs):
26 """Init some common data for the tests"""
27
28 self.dfrs = [pd.DataFrame({"load": [1, 2, 2, 3],
29 "freq": [2, 3, 3, 4],
30 "cpu": [0, 1, 0, 1]}),
31 pd.DataFrame({"load": [2, 3, 2, 1],
32 "freq": [1, 2, 2, 1],
33 "cpu": [1, 0, 1, 0]})]
34 super(TestConstraintManager, self).__init__(*args, **kwargs)
35
36 def test_one_constraint(self):
37 """Test that the constraint manager works with one constraint"""
38
39 dfr = self.dfrs[0]
40
41 c_mgr = ConstraintManager(dfr, "load", None, AttrConf.PIVOT, {})
42
Javi Merinob23658c2015-06-22 17:04:02 +010043 self.assertEquals(len(c_mgr), 1)
Javi Merinoe4d10d72015-06-22 16:43:04 +010044
Javi Merinob23658c2015-06-22 17:04:02 +010045 constraint = iter(c_mgr).next()
46 series = constraint.result[AttrConf.PIVOT_VAL]
Javi Merinoe4d10d72015-06-22 16:43:04 +010047 self.assertEquals(series.to_dict().values(),
48 dfr["load"].to_dict().values())
49
50 def test_no_pivot_multiple_runs(self):
51 """Test that the constraint manager works with multiple runs and no pivots"""
52
53 c_mgr = ConstraintManager(self.dfrs, "load", None, AttrConf.PIVOT, {})
54
Javi Merinob23658c2015-06-22 17:04:02 +010055 self.assertEquals(len(c_mgr), 2)
Javi Merinoe4d10d72015-06-22 16:43:04 +010056
Javi Merinob23658c2015-06-22 17:04:02 +010057 for constraint, orig_dfr in zip(c_mgr, self.dfrs):
Javi Merinoe4d10d72015-06-22 16:43:04 +010058 series = constraint.result[AttrConf.PIVOT_VAL]
59 self.assertEquals(series.to_dict().values(),
60 orig_dfr["load"].to_dict().values())
61
62 def test_no_pivot_multiple_columns_and_runs(self):
63 """Test the constraint manager with multiple columns and runs"""
64
65 cols = ["load", "freq"]
66 c_mgr = ConstraintManager(self.dfrs, cols, None, AttrConf.PIVOT, {})
67
Javi Merinob23658c2015-06-22 17:04:02 +010068 self.assertEquals(len(c_mgr), 2)
Javi Merinoe4d10d72015-06-22 16:43:04 +010069
Javi Merinob23658c2015-06-22 17:04:02 +010070 for constraint, orig_dfr, col in zip(c_mgr, self.dfrs, cols):
Javi Merinoe4d10d72015-06-22 16:43:04 +010071 series = constraint.result[AttrConf.PIVOT_VAL]
72 self.assertEquals(series.to_dict().values(),
73 orig_dfr[col].to_dict().values())
74
75 def test_no_pivot_filters(self):
76 """Test the constraint manager with filters"""
77
78 simple_filter = {"freq": [2]}
79
80 c_mgr = ConstraintManager(self.dfrs, "load", None, AttrConf.PIVOT,
81 simple_filter)
82
Javi Merinob23658c2015-06-22 17:04:02 +010083 num_constraints = len(c_mgr)
Javi Merinoe4d10d72015-06-22 16:43:04 +010084 self.assertEquals(num_constraints, 2)
85
Javi Merinob23658c2015-06-22 17:04:02 +010086 constraint_iter = iter(c_mgr)
87 constraint = constraint_iter.next()
88 self.assertEquals(len(constraint.result), 1)
Javi Merinoe4d10d72015-06-22 16:43:04 +010089
Javi Merinob23658c2015-06-22 17:04:02 +010090 constraint = constraint_iter.next()
91 series_second_frame = constraint.result[AttrConf.PIVOT_VAL]
Javi Merinoe4d10d72015-06-22 16:43:04 +010092 self.assertEquals(series_second_frame.to_dict().values(), [3, 2])
93
94 def test_pivoted_data(self):
95 """Test the constraint manager with a pivot and one run"""
96
97 c_mgr = ConstraintManager(self.dfrs[0], "load", None, "cpu", {})
98
Javi Merinob23658c2015-06-22 17:04:02 +010099 self.assertEquals(len(c_mgr), 1)
Javi Merinoe4d10d72015-06-22 16:43:04 +0100100
Javi Merinob23658c2015-06-22 17:04:02 +0100101 constraint = iter(c_mgr).next()
Javi Merinoe4d10d72015-06-22 16:43:04 +0100102 results = dict([(k, v.to_dict().values()) for k, v in constraint.result.items()])
103 expected_results = {0: [1, 2], 1: [2, 3]}
104
105 self.assertEquals(results, expected_results)
106
107 def test_pivoted_multirun(self):
108 """Test the constraint manager with a pivot and multiple runs"""
109
110 c_mgr = ConstraintManager(self.dfrs, "load", None, "cpu", {})
111
Javi Merinob23658c2015-06-22 17:04:02 +0100112 self.assertEquals(len(c_mgr), 2)
Javi Merinoe4d10d72015-06-22 16:43:04 +0100113
Javi Merinob23658c2015-06-22 17:04:02 +0100114 constraint_iter = iter(c_mgr)
115 constraint = constraint_iter.next()
Javi Merinoe4d10d72015-06-22 16:43:04 +0100116 self.assertEquals(constraint.result[0].to_dict().values(), [1, 2])
117
Javi Merinob23658c2015-06-22 17:04:02 +0100118 constraint = constraint_iter.next()
Javi Merinoe4d10d72015-06-22 16:43:04 +0100119 self.assertEquals(constraint.result[1].to_dict().values(), [2, 2])
120
121 def test_pivoted_multiruns_multicolumns(self):
122 """Test the constraint manager with multiple runs and columns"""
123
124 c_mgr = ConstraintManager(self.dfrs, ["load", "freq"], None, "cpu", {})
Javi Merinob23658c2015-06-22 17:04:02 +0100125 self.assertEquals(len(c_mgr), 2)
Javi Merinoe4d10d72015-06-22 16:43:04 +0100126
Javi Merinob23658c2015-06-22 17:04:02 +0100127 constraint_iter = iter(c_mgr)
128 constraint = constraint_iter.next()
Javi Merinoe4d10d72015-06-22 16:43:04 +0100129 self.assertEquals(constraint.result[1].to_dict().values(), [2, 3])
130
Javi Merinob23658c2015-06-22 17:04:02 +0100131 constraint = constraint_iter.next()
Javi Merinoe4d10d72015-06-22 16:43:04 +0100132 self.assertEquals(constraint.result[0].to_dict().values(), [2, 1])
133
134 def test_pivoted_with_filters(self):
135 """Test the constraint manager with pivoted data and filters"""
136
137 simple_filter = {"load": [2]}
138 c_mgr = ConstraintManager(self.dfrs[0], "freq", None, "cpu",
139 simple_filter)
140
Javi Merinob23658c2015-06-22 17:04:02 +0100141 self.assertEquals(len(c_mgr), 1)
Javi Merinoe4d10d72015-06-22 16:43:04 +0100142
Javi Merinob23658c2015-06-22 17:04:02 +0100143 constraint = iter(c_mgr).next()
Javi Merinoe4d10d72015-06-22 16:43:04 +0100144 result = constraint.result
145
146 self.assertEquals(result[0].iloc[0], 3)
147 self.assertEquals(result[1].iloc[0], 3)