1 /*
2  * Copyright (c) 2016 Helmut Neemann
3  * Use of this source code is governed by the GPL v3 license
4  * that can be found in the LICENSE file.
5  */
6 package de.neemann.digital.core.wiring;
7 
8 import de.neemann.digital.TestExecuter;
9 import de.neemann.digital.core.NodeException;
10 import de.neemann.digital.core.ObservableValue;
11 import de.neemann.digital.core.ObservableValues;
12 import de.neemann.digital.core.element.ElementAttributes;
13 import de.neemann.digital.core.element.Keys;
14 import de.neemann.digital.draw.elements.PinException;
15 import junit.framework.TestCase;
16 
17 import static de.neemann.digital.TestExecuter.HIGHZ;
18 import static de.neemann.digital.core.ObservableValues.ovs;
19 
20 /**
21  */
22 public class SplitterHighZTest extends TestCase {
23 
testHighZError()24     public void testHighZError() throws NodeException, PinException {
25         ObservableValue a = new ObservableValue("a", 1)
26                 .setToHighZ();
27         ObservableValue b = new ObservableValue("b", 1);
28 
29         Splitter splitter = new Splitter(new ElementAttributes()
30                 .set(Keys.INPUT_SPLIT, "1,1")
31                 .set(Keys.OUTPUT_SPLIT, "2"));
32 
33         splitter.setInputs(ovs(a, b));
34 
35         ObservableValues outputs = splitter.getOutputs();
36         assertEquals(1, outputs.size());
37 
38         TestExecuter sc = new TestExecuter().setInputs(a, b).setOutputsOf(splitter);
39         sc.check(0, 0, 0);
40         sc.check(0, 1, 2);
41         sc.check(1, 0, 1);
42         sc.check(1, 1, 3);
43         sc.checkZ(HIGHZ, HIGHZ, HIGHZ);
44     }
45 
testHighZEnabled()46     public void testHighZEnabled() throws NodeException, PinException {
47         ObservableValue a = new ObservableValue("a", 2)
48                 .setToHighZ();
49 
50         Splitter splitter = new Splitter(new ElementAttributes()
51                 .set(Keys.INPUT_SPLIT, "2")
52                 .set(Keys.OUTPUT_SPLIT, "1,1"));
53 
54         splitter.setInputs(ovs(a));
55 
56         ObservableValues outputs = splitter.getOutputs();
57         assertEquals(2, outputs.size());
58 
59         TestExecuter sc = new TestExecuter().setInputs(a).setOutputsOf(splitter);
60         sc.check(0, 0, 0);
61         sc.check(1, 1, 0);
62         sc.check(2, 0, 1);
63         sc.check(3, 1, 1);
64         sc.checkZ(HIGHZ, HIGHZ, HIGHZ);
65     }
66 
67 }
68