forked from benevolentprof/inf1340_2015_asst3
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_exercise1.py
121 lines (87 loc) · 2.9 KB
/
test_exercise1.py
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env python
""" Assignment 3, Exercise 1, INF1340, Fall, 2015. DBMS
Test module for exercise3.py
"""
__author__ = 'Susan Sim'
__email__ = "ses@drsusansim.org"
__copyright__ = "2015 Susan Sim"
__license__ = "MIT License"
from exercise1 import selection, projection, cross_product
###########
# TABLES ##
###########
EMPLOYEES = [["Surname", "FirstName", "Age", "Salary"],
["Smith", "Mary", 25, 2000],
["Black", "Lucy", 40, 3000],
["Verdi", "Nico", 36, 4500],
["Smith", "Mark", 40, 3900]]
R1 = [["Employee", "Department"],
["Smith", "sales"],
["Black", "production"],
["White", "production"]]
R2 = [["Department", "Head"],
["production", "Mori"],
["sales", "Brown"]]
#####################
# HELPER FUNCTIONS ##
#####################
def is_equal(t1, t2):
t1.sort()
t2.sort()
return t1 == t2
#####################
# FILTER FUNCTIONS ##
#####################
def filter_employees(row):
"""
Check if employee represented by row
is AT LEAST 30 years old and makes
MORE THAN 3500.
:param row: A List in the format:
[{Surname}, {FirstName}, {Age}, {Salary}]
:return: True if the row satisfies the condition.
"""
return row[-2] >= 30 and row[-1] > 3500
###################
# TEST FUNCTIONS ##
###################
def test_selection():
"""
Test select operation.
"""
result = [["Surname", "FirstName", "Age", "Salary"],
["Verdi", "Nico", 36, 4500],
["Smith", "Mark", 40, 3900]]
assert is_equal(result, selection(EMPLOYEES, filter_employees))
def test_projection():
"""
Test projection operation.
"""
result = [["Surname", "FirstName"],
["Smith", "Mary"],
["Black", "Lucy"],
["Verdi", "Nico"],
["Smith", "Mark"]]
assert is_equal(result, projection(EMPLOYEES, ["Surname", "FirstName"]))
def test_cross_product():
"""
Test cross product operation.
"""
result = [["Employee", "Department", "Department", "Head"],
["Smith", "sales", "production", "Mori"],
["Smith", "sales", "sales", "Brown"],
["Black", "production", "production", "Mori"],
["Black", "production", "sales", "Brown"],
["White", "production", "production", "Mori"],
["White", "production", "sales", "Brown"]]
shoul = [['Employee', 'Department', 'Department', 'Head'],
['Smith', 'sales', 'production', 'Mori'],
['Smith', 'sales', 'sales', 'Brown'],
['Black', 'production', 'production', 'Mori'],
['Black', 'production', 'sales', 'Brown'],
['White', 'production', 'production', 'Mori'],
['White', 'production', 'sales', 'Brown']]
assert is_equal(result, cross_product(R1, R2))
test_selection()
test_projection()
test_cross_product()