1 /*
2  * Copyright (c) 2017 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.Model;
10 import de.neemann.digital.core.ObservableValue;
11 import de.neemann.digital.core.element.ElementAttributes;
12 import de.neemann.digital.core.element.Keys;
13 import junit.framework.TestCase;
14 
15 import static de.neemann.digital.core.ObservableValues.ovs;
16 
17 public class PriorityEncoderTest extends TestCase {
18 
testEncoder2()19     public void testEncoder2() throws Exception {
20         Model model = new Model();
21         ObservableValue d0 = new ObservableValue("d0", 1);
22         ObservableValue d1 = new ObservableValue("d1", 1);
23         PriorityEncoder out = model.add(new PriorityEncoder(
24                 new ElementAttributes()
25                         .set(Keys.SELECTOR_BITS, 1)));
26         out.setInputs(ovs(d0, d1));
27 
28         TestExecuter te = new TestExecuter(model).setInputs(d1, d0).setOutputs(out.getOutputs());
29         te.check(0, 0, 0, 0);
30         te.check(0, 1, 0, 1);
31         te.check(1, 0, 1, 1);
32         te.check(1, 1, 1, 1);
33     }
34 
testEncoder4()35     public void testEncoder4() throws Exception {
36         Model model = new Model();
37         ObservableValue d0 = new ObservableValue("d0", 1);
38         ObservableValue d1 = new ObservableValue("d1", 1);
39         ObservableValue d2 = new ObservableValue("d2", 1);
40         ObservableValue d3 = new ObservableValue("d3", 1);
41         PriorityEncoder out = model.add(new PriorityEncoder(
42                 new ElementAttributes()
43                         .set(Keys.SELECTOR_BITS, 2)));
44         out.setInputs(ovs(d0, d1, d2, d3));
45 
46         TestExecuter te = new TestExecuter(model).setInputs(d3, d2, d1, d0).setOutputs(out.getOutputs());
47         te.check(0, 0, 0, 0, 0, 0);
48         te.check(0, 0, 0, 1, 0, 1);
49         te.check(0, 0, 1, 0, 1, 1);
50         te.check(0, 0, 1, 1, 1, 1);
51         te.check(0, 1, 0, 0, 2, 1);
52         te.check(0, 1, 0, 1, 2, 1);
53         te.check(0, 1, 1, 0, 2, 1);
54         te.check(0, 1, 1, 1, 2, 1);
55         te.check(1, 0, 0, 0, 3, 1);
56         te.check(1, 0, 0, 1, 3, 1);
57         te.check(1, 0, 1, 0, 3, 1);
58         te.check(1, 0, 1, 1, 3, 1);
59         te.check(1, 1, 0, 0, 3, 1);
60         te.check(1, 1, 0, 1, 3, 1);
61         te.check(1, 1, 1, 0, 3, 1);
62         te.check(1, 1, 1, 1, 3, 1);
63     }
64 
65 }
66