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.memory;
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 junit.framework.TestCase;
13 
14 import static de.neemann.digital.core.ObservableValues.ovs;
15 
16 /**
17  */
18 public class CounterTest extends TestCase {
19 
testCounter()20     public void testCounter() throws Exception {
21         ObservableValue clk = new ObservableValue("clk", 1);
22         ObservableValue en = new ObservableValue("en", 1);
23         ObservableValue clr = new ObservableValue("clr", 1);
24 
25         Model model = new Model();
26         Counter out = model.add(new Counter(
27                 new ElementAttributes()
28                         .setBits(8)));
29         out.setInputs(ovs(en, clk, clr));
30 
31         TestExecuter sc = new TestExecuter(model).setInputs(en, clk, clr).setOutputs(out.getOutputs());
32         sc.check(1, 0, 0, 0, 0);
33         sc.check(1, 1, 0, 1, 0);
34         sc.check(1, 0, 0, 1, 0);
35         sc.check(1, 1, 0, 2, 0);
36         sc.check(1, 0, 0, 2, 0);
37         sc.check(1, 1, 0, 3, 0);
38         sc.check(1, 0, 0, 3, 0);
39         sc.check(0, 0, 1, 3, 0);
40         sc.check(0, 1, 1, 0, 0);
41         sc.check(0, 0, 1, 0, 0);
42 
43         sc.check(1, 0, 0, 0, 0);
44         for (int i = 1; i <= 254; i++) {
45             sc.check(1, 0, 0, i - 1, 0);
46             sc.check(1, 1, 0, i, 0);
47         }
48         sc.check(1, 0, 0, 254, 0);
49         sc.check(1, 1, 0, 255, 1);
50         sc.check(1, 0, 0, 255, 1);
51         sc.check(1, 1, 0, 0, 0);
52         sc.check(1, 0, 0, 0, 0);
53         sc.check(1, 1, 0, 1, 0);
54     }
55 
56 
57 }
58