a595f0560ff200f017672969356dda315733ec35
[Mograsim.git] / net.mograsim.logic.core / src / net / mograsim / logic / core / tests / ComponentTest.java
1 package net.mograsim.logic.core.tests;
2
3 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
4 import static org.junit.jupiter.api.Assertions.assertEquals;
5 import static org.junit.jupiter.api.Assertions.fail;
6
7 import java.util.function.LongConsumer;
8
9 import org.junit.jupiter.api.Test;
10
11 import net.mograsim.logic.core.components.Connector;
12 import net.mograsim.logic.core.components.Demux;
13 import net.mograsim.logic.core.components.Merger;
14 import net.mograsim.logic.core.components.Mux;
15 import net.mograsim.logic.core.components.Splitter;
16 import net.mograsim.logic.core.components.TriStateBuffer;
17 import net.mograsim.logic.core.components.gates.AndGate;
18 import net.mograsim.logic.core.components.gates.NandGate;
19 import net.mograsim.logic.core.components.gates.NorGate;
20 import net.mograsim.logic.core.components.gates.NotGate;
21 import net.mograsim.logic.core.components.gates.OrGate;
22 import net.mograsim.logic.core.components.gates.XorGate;
23 import net.mograsim.logic.core.timeline.Timeline;
24 import net.mograsim.logic.core.types.Bit;
25 import net.mograsim.logic.core.types.BitVector;
26 import net.mograsim.logic.core.wires.Wire;
27 import net.mograsim.logic.core.wires.Wire.ReadEnd;
28 import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
29
30 @SuppressWarnings("unused")
31 class ComponentTest
32 {
33         private Timeline t = new Timeline(11);
34
35         @Test
36         void circuitExampleTest()
37         {
38                 Wire a = new Wire(t, 1, 1), b = new Wire(t, 1, 1), c = new Wire(t, 1, 10), d = new Wire(t, 2, 1), e = new Wire(t, 1, 1),
39                                 f = new Wire(t, 1, 1), g = new Wire(t, 1, 1), h = new Wire(t, 2, 1), i = new Wire(t, 2, 1), j = new Wire(t, 1, 1),
40                                 k = new Wire(t, 1, 1);
41                 new AndGate(t, 1, f.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd());
42                 new NotGate(t, 1, f.createReadOnlyEnd(), g.createReadWriteEnd());
43                 new Merger(t, h.createReadWriteEnd(), c.createReadOnlyEnd(), g.createReadOnlyEnd());
44                 new Mux(t, 1, i.createReadWriteEnd(), e.createReadOnlyEnd(), h.createReadOnlyEnd(), d.createReadOnlyEnd());
45                 new Splitter(t, i.createReadOnlyEnd(), k.createReadWriteEnd(), j.createReadWriteEnd());
46
47                 a.createReadWriteEnd().feedSignals(Bit.ZERO);
48                 b.createReadWriteEnd().feedSignals(Bit.ONE);
49                 c.createReadWriteEnd().feedSignals(Bit.ZERO);
50                 d.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE);
51                 e.createReadWriteEnd().feedSignals(Bit.ZERO);
52
53                 t.executeAll();
54
55                 assertEquals(Bit.ONE, j.getValue());
56                 assertEquals(Bit.ZERO, k.getValue());
57         }
58
59         @Test
60         void splitterTest()
61         {
62                 t.reset();
63                 Wire a = new Wire(t, 3, 1), b = new Wire(t, 2, 1), c = new Wire(t, 3, 1), in = new Wire(t, 8, 1);
64                 in.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
65                 new Splitter(t, in.createReadOnlyEnd(), a.createReadWriteEnd(), b.createReadWriteEnd(), c.createReadWriteEnd());
66
67                 t.executeAll();
68
69                 assertBitArrayEquals(a.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO);
70                 assertBitArrayEquals(b.getValues(), Bit.ONE, Bit.ZERO);
71                 assertBitArrayEquals(c.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE);
72         }
73
74         @Test
75         void mergerTest()
76         {
77                 t.reset();
78                 Wire a = new Wire(t, 3, 1), b = new Wire(t, 2, 1), c = new Wire(t, 3, 1), out = new Wire(t, 8, 1);
79                 a.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO);
80                 b.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO);
81                 c.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE);
82
83                 new Merger(t, out.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), c.createReadOnlyEnd());
84
85                 t.executeAll();
86
87                 assertBitArrayEquals(out.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
88         }
89
90         @Test
91         void fusionTest()
92         {
93                 t.reset();
94                 Wire a = new Wire(t, 3, 1), b = new Wire(t, 2, 1), c = new Wire(t, 3, 1), out = new Wire(t, 8, 1);
95                 Wire.fuse(a, out, 0, 0, a.length);
96                 Wire.fuse(b, out, 0, a.length, b.length);
97                 Wire.fuse(c, out, 0, a.length + b.length, c.length);
98                 ReadWriteEnd rA = a.createReadWriteEnd();
99                 rA.feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO);
100                 ReadWriteEnd rB = b.createReadWriteEnd();
101                 rB.feedSignals(Bit.ONE, Bit.ZERO);
102                 ReadWriteEnd rC = c.createReadWriteEnd();
103                 rC.feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE);
104                 t.executeAll();
105                 assertBitArrayEquals(out.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
106                 out.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO);
107                 t.executeAll();
108                 assertBitArrayEquals(rA.getValues(), Bit.X, Bit.X, Bit.X);
109                 assertBitArrayEquals(rB.getValues(), Bit.X, Bit.X);
110                 assertBitArrayEquals(rC.getValues(), Bit.X, Bit.X, Bit.X);
111                 rA.clearSignals();
112                 rB.clearSignals();
113                 rC.clearSignals();
114                 t.executeAll();
115                 assertBitArrayEquals(rA.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE);
116                 assertBitArrayEquals(rB.getValues(), Bit.ZERO, Bit.ONE);
117                 assertBitArrayEquals(rC.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO);
118         }
119
120         @Test
121         void triStateBufferTest()
122         {
123                 Wire a = new Wire(t, 1, 1), b = new Wire(t, 1, 1), en = new Wire(t, 1, 1), notEn = new Wire(t, 1, 1);
124                 new NotGate(t, 1, en.createReadOnlyEnd(), notEn.createReadWriteEnd());
125                 new TriStateBuffer(t, 1, a.createReadOnlyEnd(), b.createReadWriteEnd(), en.createReadOnlyEnd());
126                 new TriStateBuffer(t, 1, b.createReadOnlyEnd(), a.createReadWriteEnd(), notEn.createReadOnlyEnd());
127
128                 ReadWriteEnd enI = en.createReadWriteEnd(), aI = a.createReadWriteEnd(), bI = b.createReadWriteEnd();
129                 enI.feedSignals(Bit.ONE);
130                 aI.feedSignals(Bit.ONE);
131                 bI.feedSignals(Bit.Z);
132
133                 t.executeAll();
134
135                 assertEquals(Bit.ONE, b.getValue());
136
137                 bI.feedSignals(Bit.ZERO);
138
139                 t.executeAll();
140
141                 assertEquals(Bit.X, b.getValue());
142                 assertEquals(Bit.ONE, a.getValue());
143
144                 aI.clearSignals();
145                 enI.feedSignals(Bit.ZERO);
146
147                 t.executeAll();
148
149                 assertEquals(Bit.ZERO, a.getValue());
150
151         }
152
153         @Test
154         void muxTest()
155         {
156                 t.reset();
157                 Wire a = new Wire(t, 4, 3), b = new Wire(t, 4, 6), c = new Wire(t, 4, 4), select = new Wire(t, 2, 5), out = new Wire(t, 4, 1);
158                 ReadWriteEnd selectIn = select.createReadWriteEnd();
159
160                 selectIn.feedSignals(Bit.ZERO, Bit.ZERO);
161                 a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO);
162                 c.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
163
164                 new Mux(t, 1, out.createReadWriteEnd(), select.createReadOnlyEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(),
165                                 c.createReadOnlyEnd());
166                 t.executeAll();
167
168                 assertBitArrayEquals(out.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO);
169                 selectIn.feedSignals(Bit.ZERO, Bit.ONE);
170                 t.executeAll();
171
172                 assertBitArrayEquals(out.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
173
174                 selectIn.feedSignals(Bit.ONE, Bit.ONE);
175                 t.executeAll();
176
177                 assertBitArrayEquals(out.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z);
178
179         }
180
181         @Test
182         void demuxTest()
183         {
184                 t.reset();
185                 Wire a = new Wire(t, 4, 3), b = new Wire(t, 4, 6), c = new Wire(t, 4, 4), select = new Wire(t, 2, 5), in = new Wire(t, 4, 1);
186                 ReadWriteEnd selectIn = select.createReadWriteEnd();
187
188                 selectIn.feedSignals(Bit.ZERO, Bit.ZERO);
189                 in.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO);
190
191                 new Demux(t, 1, in.createReadOnlyEnd(), select.createReadOnlyEnd(), a.createReadWriteEnd(), b.createReadWriteEnd(),
192                                 c.createReadWriteEnd());
193                 t.executeAll();
194
195                 assertBitArrayEquals(a.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO);
196                 assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U, Bit.U);
197                 assertBitArrayEquals(c.getValues(), Bit.U, Bit.U, Bit.U, Bit.U);
198                 selectIn.feedSignals(Bit.ZERO, Bit.ONE);
199                 t.executeAll();
200
201                 assertBitArrayEquals(a.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z);
202                 assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U, Bit.U);
203                 assertBitArrayEquals(c.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO);
204
205                 selectIn.feedSignals(Bit.ONE, Bit.ONE);
206                 t.executeAll();
207
208                 assertBitArrayEquals(a.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z);
209                 assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U, Bit.U);
210                 assertBitArrayEquals(c.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z);
211
212         }
213
214         @Test
215         void andTest()
216         {
217                 t.reset();
218                 Wire a = new Wire(t, 4, 1), b = new Wire(t, 4, 3), c = new Wire(t, 4, 1);
219                 new AndGate(t, 1, c.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd());
220                 a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);
221                 b.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
222
223                 t.executeAll();
224
225                 assertBitArrayEquals(c.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ZERO);
226         }
227
228         @Test
229         void orTest()
230         {
231                 t.reset();
232                 Wire a = new Wire(t, 4, 1), b = new Wire(t, 4, 3), c = new Wire(t, 4, 1);
233                 new OrGate(t, 1, c.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd());
234                 a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);
235                 b.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
236
237                 t.executeAll();
238
239                 assertBitArrayEquals(c.getValues(), Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ONE);
240         }
241
242         @Test
243         void nandTest()
244         {
245                 t.reset();
246                 Wire a = new Wire(t, 4, 1), b = new Wire(t, 4, 3), c = new Wire(t, 4, 1), d = new Wire(t, 4, 1);
247                 new NandGate(t, 1, d.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), c.createReadOnlyEnd());
248                 a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);
249                 b.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
250                 c.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);
251
252                 t.executeAll();
253
254                 assertBitArrayEquals(d.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ONE);
255         }
256
257         @Test
258         void norTest()
259         {
260                 t.reset();
261                 Wire a = new Wire(t, 4, 1), b = new Wire(t, 4, 3), c = new Wire(t, 4, 1), d = new Wire(t, 4, 1);
262                 new NorGate(t, 1, d.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), c.createReadOnlyEnd());
263                 a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);
264                 b.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE);
265                 c.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO);
266
267                 t.executeAll();
268
269                 assertBitArrayEquals(d.getValues(), Bit.ZERO, Bit.ZERO, Bit.ONE, Bit.ZERO);
270         }
271
272         @Test
273         void xorTest()
274         {
275                 t.reset();
276                 Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 2), c = new Wire(t, 3, 1), d = new Wire(t, 3, 1);
277                 new XorGate(t, 1, d.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), c.createReadOnlyEnd());
278                 a.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ONE);
279                 b.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE);
280                 c.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE);
281
282                 t.executeAll();
283
284                 assertBitArrayEquals(d.getValues(), Bit.ZERO, Bit.ONE, Bit.ONE);
285         }
286
287         @Test
288         void notTest()
289         {
290                 t.reset();
291                 Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 2);
292                 new NotGate(t, 1, a.createReadOnlyEnd(), b.createReadWriteEnd());
293                 a.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ONE);
294
295                 t.executeAll();
296
297                 assertBitArrayEquals(b.getValues(), Bit.ONE, Bit.ZERO, Bit.ZERO);
298         }
299
300         @Test
301         void rsLatchCircuitTest()
302         {
303                 t.reset();
304                 Wire r = new Wire(t, 1, 1), s = new Wire(t, 1, 1), t1 = new Wire(t, 1, 15), t2 = new Wire(t, 1, 1), q = new Wire(t, 1, 1),
305                                 nq = new Wire(t, 1, 1);
306
307                 new OrGate(t, 1, t2.createReadWriteEnd(), r.createReadOnlyEnd(), nq.createReadOnlyEnd());
308                 new OrGate(t, 1, t1.createReadWriteEnd(), s.createReadOnlyEnd(), q.createReadOnlyEnd());
309                 new NotGate(t, 1, t2.createReadOnlyEnd(), q.createReadWriteEnd());
310                 new NotGate(t, 1, t1.createReadOnlyEnd(), nq.createReadWriteEnd());
311
312                 ReadWriteEnd sIn = s.createReadWriteEnd(), rIn = r.createReadWriteEnd();
313
314                 sIn.feedSignals(Bit.ONE);
315                 rIn.feedSignals(Bit.ZERO);
316
317                 t.executeAll();
318
319                 assertEquals(Bit.ONE, q.getValue());
320                 assertEquals(Bit.ZERO, nq.getValue());
321
322                 sIn.feedSignals(Bit.ZERO);
323
324                 t.executeAll();
325                 assertEquals(Bit.ONE, q.getValue());
326                 assertEquals(Bit.ZERO, nq.getValue());
327
328                 rIn.feedSignals(Bit.ONE);
329
330                 t.executeAll();
331
332                 assertEquals(Bit.ZERO, q.getValue());
333                 assertEquals(Bit.ONE, nq.getValue());
334         }
335
336         @Test
337         void numericValueTest()
338         {
339                 t.reset();
340
341                 Wire a = new Wire(t, 4, 1);
342                 a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ONE, Bit.ONE);
343
344                 t.executeAll();
345
346                 assertEquals(15, a.getUnsignedValue());
347                 assertEquals(-1, a.getSignedValue());
348         }
349
350         boolean flag = false;
351
352         @Test
353         void simpleTimelineTest()
354         {
355                 Timeline t = new Timeline(3);
356                 flag = false;
357                 t.addEvent((e) ->
358                 {
359                         if (!flag)
360                                 fail("Events executed out of order!");
361                         flag = false;
362                 }, 15);
363                 t.addEvent((e) ->
364                 {
365                         if (flag)
366                                 fail("Events executed out of order!");
367                         flag = true;
368                 }, 10);
369                 t.addEvent((e) ->
370                 {
371                         if (flag)
372                                 fail("Events executed out of order!");
373                         flag = true;
374                 }, 20);
375                 t.addEvent((e) ->
376                 {
377                         fail("Only supposed to execute until timestamp 20, not 25");
378                 }, 25);
379
380                 t.executeUntil(t.laterThan(20), 100);
381
382                 if (!flag)
383                         fail("Not all events were executed in order!");
384         }
385
386         @Test
387         void multipleInputs()
388         {
389                 t.reset();
390                 Wire w = new Wire(t, 2, 1);
391                 ReadWriteEnd wI1 = w.createReadWriteEnd(), wI2 = w.createReadWriteEnd();
392                 wI1.feedSignals(Bit.ONE, Bit.Z);
393                 wI2.feedSignals(Bit.Z, Bit.X);
394                 t.executeAll();
395                 assertBitArrayEquals(w.getValues(), Bit.ONE, Bit.X);
396
397                 wI2.feedSignals(Bit.ZERO, Bit.Z);
398                 t.executeAll();
399                 assertBitArrayEquals(w.getValues(), Bit.X, Bit.Z);
400
401                 wI2.feedSignals(Bit.Z, Bit.Z);
402                 t.executeAll();
403                 assertBitArrayEquals(w.getValues(), Bit.ONE, Bit.Z);
404
405                 wI2.feedSignals(Bit.ONE, Bit.Z);
406                 ReadEnd rE = w.createReadOnlyEnd();
407                 rE.registerObserver((i) -> fail("WireEnd notified observer, although value did not change."));
408                 t.executeAll();
409                 rE.close();
410                 wI1.feedSignals(Bit.X, Bit.X);
411                 t.executeAll();
412                 wI1.registerObserver((i) -> fail("WireEnd notified observer, although it was closed."));
413                 wI1.close();
414                 assertBitArrayEquals(w.getValues(), Bit.ONE, Bit.Z);
415         }
416
417         @Test
418         void wireConnections()
419         {
420                 // Nur ein Experiment, was über mehrere 'passive' Bausteine hinweg passieren würde
421
422                 t.reset();
423
424                 Wire a = new Wire(t, 1, 2);
425                 Wire b = new Wire(t, 1, 2);
426                 Wire c = new Wire(t, 1, 2);
427                 ReadWriteEnd aI = a.createReadWriteEnd();
428                 ReadWriteEnd bI = b.createReadWriteEnd();
429                 ReadWriteEnd cI = c.createReadWriteEnd();
430
431                 TestBitDisplay test = new TestBitDisplay(t, c.createReadOnlyEnd());
432                 TestBitDisplay test2 = new TestBitDisplay(t, a.createReadOnlyEnd());
433                 LongConsumer print = time -> System.out.format("Time %2d\n   a: %s\n   b: %s\n   c: %s\n", time, a, b, c);
434
435                 cI.feedSignals(Bit.ONE);
436                 test.assertAfterSimulationIs(print, Bit.ONE);
437
438                 cI.feedSignals(Bit.X);
439                 test.assertAfterSimulationIs(print, Bit.X);
440
441                 cI.feedSignals(Bit.X);
442                 cI.feedSignals(Bit.Z);
443                 test.assertAfterSimulationIs(print, Bit.Z);
444
445                 new Connector(t, b.createReadWriteEnd(), c.createReadWriteEnd()).connect();
446                 test.assertAfterSimulationIs(print, Bit.Z);
447                 System.err.println("ONE");
448                 bI.feedSignals(Bit.ONE);
449                 test.assertAfterSimulationIs(print, Bit.ONE);
450                 System.err.println("ZERO");
451                 bI.feedSignals(Bit.ZERO);
452                 test.assertAfterSimulationIs(print, Bit.ZERO);
453                 System.err.println("Z");
454                 bI.feedSignals(Bit.Z);
455                 test.assertAfterSimulationIs(print, Bit.Z);
456
457                 new Connector(t, a.createReadWriteEnd(), b.createReadWriteEnd()).connect();
458                 System.err.println("Z 2");
459                 aI.feedSignals(Bit.Z);
460                 test.assertAfterSimulationIs(print, Bit.Z);
461                 test2.assertAfterSimulationIs(Bit.Z);
462                 System.err.println("ONE 2");
463                 aI.feedSignals(Bit.ONE);
464                 test.assertAfterSimulationIs(print, Bit.ONE);
465                 test2.assertAfterSimulationIs(Bit.ONE);
466                 System.err.println("ZERO 2");
467                 aI.feedSignals(Bit.ZERO);
468                 test.assertAfterSimulationIs(print, Bit.ZERO);
469                 test2.assertAfterSimulationIs(Bit.ZERO);
470                 System.err.println("Z 2 II");
471                 aI.feedSignals(Bit.Z);
472                 test.assertAfterSimulationIs(print, Bit.Z);
473                 test2.assertAfterSimulationIs(Bit.Z);
474
475                 System.err.println("No Conflict yet");
476                 bI.feedSignals(Bit.ONE);
477                 test.assertAfterSimulationIs(print, Bit.ONE);
478                 test2.assertAfterSimulationIs(Bit.ONE);
479                 aI.feedSignals(Bit.ONE);
480                 test.assertAfterSimulationIs(print, Bit.ONE);
481                 test2.assertAfterSimulationIs(Bit.ONE);
482                 System.err.println("Conflict");
483                 aI.feedSignals(Bit.ZERO);
484                 test.assertAfterSimulationIs(print, Bit.X);
485                 test2.assertAfterSimulationIs(Bit.X);
486                 aI.feedSignals(Bit.ONE);
487                 test.assertAfterSimulationIs(print, Bit.ONE);
488                 test2.assertAfterSimulationIs(Bit.ONE);
489         }
490
491         private static void assertBitArrayEquals(BitVector actual, Bit... expected)
492         {
493                 assertArrayEquals(expected, actual.getBits());
494         }
495 }