60
60
(lambda (rowid w value label)
61
61
(observe (simulate_y ,rowid ,w) value ,label))]
62
62
63
- [define observers (list observe_m
64
- observe_y)]
65
-
66
63
[define inputs (list 'w)]
67
64
68
65
[define transition
69
66
(lambda (N)
70
67
(mh default one N))]
71
- """
72
68
69
+ """
73
70
74
71
source_concrete = """
75
72
define make_cgpm = () -> {
100
97
$label: observe simulate_y($rowid, $w) = value;
101
98
};
102
99
103
- define observers = [observe_m, observe_y];
104
-
105
100
define inputs = ["w"];
106
101
107
102
define transition = (N) -> {
108
103
mh(default, one, N)
109
104
};
105
+
110
106
"""
111
107
108
+ # Define source with client overriding observers.
109
+ source_abstract_observers_good = source_abstract + \
110
+ '[define observers (list observe_m observe_y)]\n '
111
+ source_abstract_observers_bad = source_abstract + \
112
+ '[define observers (list observe_m observe_y 2)]\n '
113
+
114
+ source_concrete_observers_good = source_concrete + \
115
+ 'define observers = [observe_m, observe_y];\n '
116
+ source_concrete_observers_bad = source_concrete + \
117
+ 'define observers = [observe_m, observe_y, 2];\n '
118
+
119
+ # Define test cases.
112
120
Case = namedtuple ('Case' , ['source' , 'mode' ])
113
121
cases = [
114
- Case (source_abstract , 'church_prime' ),
115
- Case (source_concrete , 'venture_script' ),
122
+ Case (source_abstract , 'church_prime' ),
123
+ Case (source_concrete , 'venture_script' ),
124
+ Case (source_abstract_observers_good , 'church_prime' ),
125
+ Case (source_concrete_observers_good , 'venture_script' ),
126
+ ]
127
+
128
+ CaseObs = namedtuple ('Case' , ['source' , 'obsok' , 'mode' ])
129
+ casesObs = [
130
+ CaseObs (source_abstract , True , 'church_prime' ),
131
+ CaseObs (source_concrete , True , 'venture_script' ),
132
+ CaseObs (source_abstract_observers_good , True , 'church_prime' ),
133
+ CaseObs (source_concrete_observers_good , True , 'venture_script' ),
134
+ CaseObs (source_abstract_observers_bad , False , 'church_prime' ),
135
+ CaseObs (source_concrete_observers_bad , False , 'venture_script' ),
116
136
]
117
137
118
138
@pytest .mark .parametrize ('case' , cases )
@@ -133,6 +153,14 @@ def test_wrong_inputs(case):
133
153
with pytest .raises (ValueError ):
134
154
VsCGpm (outputs = [1 ,2 ], inputs = [3 ,4 ], source = case .source , mode = case .mode )
135
155
156
+ @pytest .mark .parametrize ('case' , casesObs )
157
+ def test_wrong_observers (case ):
158
+ try :
159
+ VsCGpm (outputs = [0 ,1 ], inputs = [2 ], source = case .source , mode = case .mode )
160
+ assert case .obsok
161
+ except ValueError :
162
+ assert not case .obsok
163
+
136
164
@pytest .mark .parametrize ('case' , cases )
137
165
def test_incorporate_unincorporate (case ):
138
166
cgpm = VsCGpm (outputs = [0 ,1 ], inputs = [3 ], source = case .source , mode = case .mode )
0 commit comments