circuits 0.9.2 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NGUwZTZhZWY5NmMwMGM2MmEwMDJmNWU3YTgzZjAwMjFjOWRlODA2MA==
4
+ NWRmNzIwNmQ5NTkxNmIyYmQ4MWM1ZTg4NWE4YzY1ZDBiYzRkMjhhNA==
5
5
  data.tar.gz: !binary |-
6
- MDNjMDhjODE2YjE5NWViNmMxMGE1OWQzNDlmZTk0MGQ5NWZlNjNhZQ==
6
+ OWZjOGE4YzQ1MWYyOTgzMmRiMzk2MGRmMmU3Njg3ZDFlYTcxN2Q0MA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MjhiZWFiYzE1NGY0MGY1NjgxNjVlNWFkNjJlNjY0NzA1ZTgwYTFjZmU0Y2I2
10
- OTJjNmI2MTAxYzE4MmMwNjJmMDExZmEzMjg3ZTU3YTM2NDg2MTA5OTRiMmUx
11
- OGM3MDYwMTVmOTgwNjlkODI5ZTFlNDc5MDdlN2UyNWE5MTMwY2U=
9
+ ODcyZjIwYWIyMjZhZDhlOGM2YTBjYjdkMjljNzFhYmQwYjBlZDE4ZGU5MjZj
10
+ MzNmMzg3NTFjZTBiNmM3MjUxZTgxNTdkYmEzNjIzNzliZmI4ZTE3YWRmMTBm
11
+ YTI1NmVmMWMxZDg0ODBlMmNkN2QwN2RmN2ZmMDc3NTcxMjVjNmI=
12
12
  data.tar.gz: !binary |-
13
- YzBiODA1NWYyY2U4OGY0MTA4MTM5Y2MxZGZkYzk3YTE3N2M1ZTFlNzExM2Mx
14
- YjY4Mjk4MTZjNWQxNzVmZjUyMDNiZTc3M2Y3NzRjZDZlY2ZhZDQ2NzZiYjBk
15
- NTZmZjE1Y2YzOTY0MjU3Y2ZhOTllOWI5ODUwM2YwYTAwOGQ2MGU=
13
+ MmQwZjU2NGJjZWE3MzYyYTU3ODFhN2Y2OWY5YmJmN2JhZTNkOGMwNmZhZmI4
14
+ MzMxYzZiYjQyZTI0NWVlZmUxMjZjZTgxNmQyYzBlYmY4YzEzZDE5ZjcyODMx
15
+ ZDY5ZTE0YjAzNzRiMDJjNDcxMWY1MWFlZjU3Y2ExYTgxZWNmM2Y=
data/README.md CHANGED
@@ -38,13 +38,13 @@ Or install it yourself as:
38
38
  ```ruby
39
39
  and_gate = Circuits::Component::And.new
40
40
  # Set the inputs
41
- and_gate[:a].set true
42
- and_gate[:b].set false
41
+ and_gate.a.set true
42
+ and_gate.b.set false
43
43
  # Update the AND gate
44
44
  and_gate.tick # compute the next output from the inputs
45
45
  and_gate.tock # apply to the output after all components have "ticked"
46
46
  # Get the output
47
- and_gate[:out].get # false
47
+ and_gate.out.get # false
48
48
  ```
49
49
 
50
50
  ### Linking components
@@ -52,7 +52,7 @@ and_gate[:out].get # false
52
52
  ```ruby
53
53
  and_gate = Circuits::Component::And.new
54
54
  not_gate = Circuits::Component::Not.new
55
- not_gate[:in].set and_gate[:out]
55
+ not_gate.in.set and_gate.out
56
56
  ```
57
57
 
58
58
  ## Contributing
@@ -27,16 +27,33 @@ module Circuits
27
27
  # the outputs of this component
28
28
  attr_reader :outputs
29
29
 
30
+ # For easy access to the ports
31
+ # @param [Symbol] method_name The name of the method
32
+ # @return [Input, Outpus] The corresponding port
33
+ def method_missing(method_name, *_, &__)
34
+ res = self[method_name]
35
+ super if res.nil?
36
+ res
37
+ end
38
+
30
39
  # Sets all the outputs expose what was set in #tick
31
40
  def tock
32
41
  outputs.each(&:tock)
33
42
  end
34
43
 
44
+ # So we can advertise what ports are available from {#method_missing}
45
+ # @param [Symbol] method_name The name of the method
46
+ # @return [Boolean] Wether or a method call will be responded to
47
+ def respond_to_missing?(method_name, _)
48
+ !self[method_name].nil? || super
49
+ end
50
+
35
51
  # Gets the teminal assigned to the port
36
52
  # @param port [Symbol] The symbol that represents the terminal
37
53
  # @return [Input, Output] The terminal
38
54
  def [](port)
39
55
  port_mapping = port_mappings[port]
56
+ return nil if port_mapping.nil?
40
57
  port_number = port_mapping[:number]
41
58
  case port_mapping[:type]
42
59
  when :input
@@ -1,5 +1,5 @@
1
1
  # Circuits allows you to express logical circuits in code
2
2
  module Circuits
3
3
  # The version of the Circuits gem
4
- VERSION = '0.9.2'
4
+ VERSION = '0.10.0'
5
5
  end
@@ -6,52 +6,43 @@ describe Circuits::Component::And do
6
6
  context 'default input count' do
7
7
  subject { Circuits::Component::And.new }
8
8
 
9
- before do
10
- subject[:a].set input_1
11
- subject[:b].set input_2
12
- end
13
-
14
9
  context 'false + false' do
15
- let(:input_1) { false }
16
- let(:input_2) { false }
17
-
18
10
  it '= false' do
11
+ subject.a.set false
12
+ subject.b.set false
19
13
  subject.tick
20
14
  subject.tock
21
- expect(subject[:out].get).to eq(false)
15
+ expect(subject.out.get).to eq false
22
16
  end
23
17
  end
24
18
 
25
19
  context 'true + false' do
26
- let(:input_1) { true }
27
- let(:input_2) { false }
28
-
29
20
  it '= false' do
21
+ subject.a.set true
22
+ subject.b.set false
30
23
  subject.tick
31
24
  subject.tock
32
- expect(subject[:out].get).to eq(false)
25
+ expect(subject.out.get).to eq false
33
26
  end
34
27
  end
35
28
 
36
29
  context 'false + true' do
37
- let(:input_1) { false }
38
- let(:input_2) { true }
39
-
40
30
  it '= false' do
31
+ subject.a.set false
32
+ subject.b.set true
41
33
  subject.tick
42
34
  subject.tock
43
- expect(subject[:out].get).to eq(false)
35
+ expect(subject.out.get).to eq false
44
36
  end
45
37
  end
46
38
 
47
39
  context 'true + true' do
48
- let(:input_1) { true }
49
- let(:input_2) { true }
50
-
51
40
  it '= true' do
41
+ subject.a.set true
42
+ subject.b.set true
52
43
  subject.tick
53
44
  subject.tock
54
- expect(subject[:out].get).to eq(true)
45
+ expect(subject.out.get).to eq true
55
46
  end
56
47
  end
57
48
  end
@@ -70,7 +61,7 @@ describe Circuits::Component::And do
70
61
  it '= true' do
71
62
  subject.tick
72
63
  subject.tock
73
- expect(subject[:out].get).to eq(true)
64
+ expect(subject.out.get).to eq true
74
65
  end
75
66
  end
76
67
 
@@ -80,7 +71,7 @@ describe Circuits::Component::And do
80
71
  it '= false' do
81
72
  subject.tick
82
73
  subject.tock
83
- expect(subject[:out].get).to eq(false)
74
+ expect(subject.out.get).to eq false
84
75
  end
85
76
  end
86
77
 
@@ -96,7 +87,7 @@ describe Circuits::Component::And do
96
87
  it '= false' do
97
88
  subject.tick
98
89
  subject.tock
99
- expect(subject[:out].get).to eq(false)
90
+ expect(subject.out.get).to eq false
100
91
  end
101
92
  end
102
93
  end
@@ -28,26 +28,50 @@ describe Circuits::Component::Base do
28
28
  context 'one input and one output' do
29
29
  subject { MockComponent1.new }
30
30
 
31
- it 'has the input available as :in' do
31
+ it 'has the input available as #in' do
32
32
  expect(subject[:in]).to eq(subject.inputs[0])
33
33
  end
34
34
 
35
- it 'has the output available as :out' do
35
+ it 'has the output available as #out' do
36
36
  expect(subject[:out]).to eq(subject.outputs[0])
37
37
  end
38
+
39
+ it 'has the input available as :in' do
40
+ expect(subject.in).to eq(subject.inputs[0])
41
+ end
42
+
43
+ it 'has the output available as :out' do
44
+ expect(subject.out).to eq(subject.outputs[0])
45
+ end
46
+
47
+ it 'gets nil when invalid' do
48
+ expect(subject[:a]).to eq(nil)
49
+ end
50
+
51
+ it 'responds to #in' do
52
+ expect(subject.respond_to? :in).to eq true
53
+ end
54
+
55
+ it 'responds to #out' do
56
+ expect(subject.respond_to? :out).to eq true
57
+ end
58
+
59
+ it 'does not respond to #a' do
60
+ expect(subject.respond_to? :a).to eq false
61
+ end
38
62
  end
39
63
 
40
64
  context 'two inputs and two outputs' do
41
65
  subject { MockComponent2.new }
42
66
 
43
- it 'has the inputs available as :a and :b' do
44
- expect(subject[:a]).to eq(subject.inputs[0])
45
- expect(subject[:b]).to eq(subject.inputs[1])
67
+ it 'has the inputs available as #a and #b' do
68
+ expect(subject.a).to eq(subject.inputs[0])
69
+ expect(subject.b).to eq(subject.inputs[1])
46
70
  end
47
71
 
48
- it 'has the outputs available as :c and :d' do
49
- expect(subject[:c]).to eq(subject.outputs[0])
50
- expect(subject[:d]).to eq(subject.outputs[1])
72
+ it 'has the outputs available as #c and #d' do
73
+ expect(subject.c).to eq(subject.outputs[0])
74
+ expect(subject.d).to eq(subject.outputs[1])
51
75
  end
52
76
  end
53
77
  end
@@ -7,121 +7,121 @@ describe Circuits::Component::D do
7
7
 
8
8
  context 'it has just been initialized' do
9
9
  it 'is unset' do
10
- expect(subject[:q].get).to eq(false)
11
- expect(subject[:not_q].get).to eq(true)
10
+ expect(subject.q.get).to eq false
11
+ expect(subject.not_q.get).to eq true
12
12
  end
13
13
 
14
14
  it 'is stable' do
15
15
  subject.tick
16
16
  subject.tock
17
- expect(subject[:q].get).to eq(false)
18
- expect(subject[:not_q].get).to eq(true)
17
+ expect(subject.q.get).to eq false
18
+ expect(subject.not_q.get).to eq true
19
19
  end
20
20
  end
21
21
 
22
22
  context 'has just been set' do
23
23
  before do
24
- subject[:clk].set false
24
+ subject.clk.set false
25
25
  subject.tick
26
26
  subject.tock
27
- subject[:d].set true
28
- subject[:clk].set true
27
+ subject.d.set true
28
+ subject.clk.set true
29
29
  subject.tick
30
30
  subject.tock
31
- subject[:d].set false
32
- subject[:clk].set false
31
+ subject.d.set false
32
+ subject.clk.set false
33
33
  end
34
34
 
35
35
  it 'is set' do
36
- expect(subject[:q].get).to eq(true)
37
- expect(subject[:not_q].get).to eq(false)
36
+ expect(subject.q.get).to eq true
37
+ expect(subject.not_q.get).to eq false
38
38
  end
39
39
 
40
40
  it 'is stable' do
41
41
  subject.tick
42
42
  subject.tock
43
- expect(subject[:q].get).to eq(true)
44
- expect(subject[:not_q].get).to eq(false)
43
+ expect(subject.q.get).to eq true
44
+ expect(subject.not_q.get).to eq false
45
45
  end
46
46
 
47
47
  it 'd high has no effect' do
48
- subject[:d].set true
48
+ subject.d.set true
49
49
  subject.tick
50
50
  subject.tock
51
- expect(subject[:q].get).to eq(true)
52
- expect(subject[:not_q].get).to eq(false)
51
+ expect(subject.q.get).to eq true
52
+ expect(subject.not_q.get).to eq false
53
53
  end
54
54
 
55
55
  it 'clock has to be positive edge' do
56
- subject[:d].set false
57
- subject[:clk].set true
56
+ subject.d.set false
57
+ subject.clk.set true
58
58
  subject.tick
59
59
  subject.tock
60
- expect(subject[:q].get).to eq(true)
61
- expect(subject[:not_q].get).to eq(false)
60
+ expect(subject.q.get).to eq true
61
+ expect(subject.not_q.get).to eq false
62
62
  end
63
63
 
64
64
  it 'can be reset' do
65
65
  subject.tick
66
66
  subject.tock
67
- subject[:clk].set true
67
+ subject.clk.set true
68
68
  subject.tick
69
69
  subject.tock
70
- expect(subject[:q].get).to eq(false)
71
- expect(subject[:not_q].get).to eq(true)
70
+ expect(subject.q.get).to eq false
71
+ expect(subject.not_q.get).to eq true
72
72
  end
73
73
  end
74
74
 
75
75
  context 'has just been reset' do
76
76
  before do
77
- subject[:clk].set false
77
+ subject.clk.set false
78
78
  subject.tick
79
79
  subject.tock
80
- subject[:d].set false
81
- subject[:clk].set true
80
+ subject.d.set false
81
+ subject.clk.set true
82
82
  subject.tick
83
83
  subject.tock
84
- subject[:clk].set false
84
+ subject.clk.set false
85
85
  end
86
86
 
87
87
  it 'is reset' do
88
- expect(subject[:q].get).to eq(false)
89
- expect(subject[:not_q].get).to eq(true)
88
+ expect(subject.q.get).to eq false
89
+ expect(subject.not_q.get).to eq true
90
90
  end
91
91
 
92
92
  it 'is stable' do
93
93
  subject.tick
94
94
  subject.tock
95
- expect(subject[:q].get).to eq(false)
96
- expect(subject[:not_q].get).to eq(true)
95
+ expect(subject.q.get).to eq false
96
+ expect(subject.not_q.get).to eq true
97
97
  end
98
98
 
99
99
  it 'd high has no effect' do
100
- subject[:d].set true
100
+ subject.d.set true
101
101
  subject.tick
102
102
  subject.tock
103
- expect(subject[:q].get).to eq(false)
104
- expect(subject[:not_q].get).to eq(true)
103
+ expect(subject.q.get).to eq false
104
+ expect(subject.not_q.get).to eq true
105
105
  end
106
106
 
107
107
  it 'clock has to be positive edge' do
108
- subject[:d].set true
109
- subject[:clk].set true
108
+ subject.d.set true
109
+ subject.clk.set true
110
110
  subject.tick
111
111
  subject.tock
112
- expect(subject[:q].get).to eq(false)
113
- expect(subject[:not_q].get).to eq(true)
112
+ expect(subject.q.get).to eq false
113
+ expect(subject.not_q.get).to eq true
114
114
  end
115
115
 
116
116
  it 'can be set' do
117
117
  subject.tick
118
118
  subject.tock
119
- subject[:d].set true
120
- subject[:clk].set true
119
+ subject.d.set true
120
+ subject.clk.set true
121
121
  subject.tick
122
122
  subject.tock
123
- expect(subject[:q].get).to eq(true)
124
- expect(subject[:not_q].get).to eq(false)
123
+ expect(subject.q.get).to eq true
124
+ expect(subject.not_q.get).to eq false
125
125
  end
126
126
  end
127
127
  end
@@ -6,55 +6,47 @@ describe Circuits::Component::Nand do
6
6
  context 'default input count' do
7
7
  subject { Circuits::Component::Nand.new }
8
8
 
9
- before do
10
- subject[:a].set input_1
11
- subject[:b].set input_2
12
- end
13
-
14
9
  context 'false + false' do
15
- let(:input_1) { false }
16
- let(:input_2) { false }
17
-
18
10
  it '= true' do
11
+ subject.a.set false
12
+ subject.b.set false
19
13
  subject.tick
20
14
  subject.tock
21
- expect(subject[:out].get).to eq(true)
15
+ expect(subject.out.get).to eq true
22
16
  end
23
17
  end
24
18
 
25
19
  context 'true + false' do
26
- let(:input_1) { true }
27
- let(:input_2) { false }
28
-
29
20
  it '= true' do
21
+ subject.a.set true
22
+ subject.b.set false
30
23
  subject.tick
31
24
  subject.tock
32
- expect(subject[:out].get).to eq(true)
25
+ expect(subject.out.get).to eq true
33
26
  end
34
27
  end
35
28
 
36
29
  context 'false + true' do
37
- let(:input_1) { false }
38
- let(:input_2) { true }
39
-
40
30
  it '= true' do
31
+ subject.a.set false
32
+ subject.b.set true
41
33
  subject.tick
42
34
  subject.tock
43
- expect(subject[:out].get).to eq(true)
35
+ expect(subject.out.get).to eq true
44
36
  end
45
37
  end
46
38
 
47
39
  context 'true + true' do
48
- let(:input_1) { true }
49
- let(:input_2) { true }
50
-
51
40
  it '= false' do
41
+ subject.a.set true
42
+ subject.b.set true
52
43
  subject.tick
53
44
  subject.tock
54
- expect(subject[:out].get).to eq(false)
45
+ expect(subject.out.get).to eq false
55
46
  end
56
47
  end
57
48
  end
49
+
58
50
  [3, 4, 8].each do |n|
59
51
  context "with #{n} inputs" do
60
52
  subject { Circuits::Component::Nand.new input_count: n }
@@ -69,7 +61,7 @@ describe Circuits::Component::Nand do
69
61
  it '= false' do
70
62
  subject.tick
71
63
  subject.tock
72
- expect(subject[:out].get).to eq(false)
64
+ expect(subject.out.get).to eq false
73
65
  end
74
66
  end
75
67
 
@@ -79,7 +71,7 @@ describe Circuits::Component::Nand do
79
71
  it '= true' do
80
72
  subject.tick
81
73
  subject.tock
82
- expect(subject[:out].get).to eq(true)
74
+ expect(subject.out.get).to eq true
83
75
  end
84
76
  end
85
77
 
@@ -95,7 +87,7 @@ describe Circuits::Component::Nand do
95
87
  it '= true' do
96
88
  subject.tick
97
89
  subject.tock
98
- expect(subject[:out].get).to eq(true)
90
+ expect(subject.out.get).to eq true
99
91
  end
100
92
  end
101
93
  end
@@ -6,55 +6,47 @@ describe Circuits::Component::Nor do
6
6
  context 'default input count' do
7
7
  subject { Circuits::Component::Nor.new }
8
8
 
9
- before do
10
- subject[:a].set input_1
11
- subject[:b].set input_2
12
- end
13
-
14
9
  context 'false + false' do
15
- let(:input_1) { false }
16
- let(:input_2) { false }
17
-
18
10
  it '= true' do
11
+ subject.a.set false
12
+ subject.b.set false
19
13
  subject.tick
20
14
  subject.tock
21
- expect(subject[:out].get).to eq(true)
15
+ expect(subject.out.get).to eq true
22
16
  end
23
17
  end
24
18
 
25
19
  context 'true + false' do
26
- let(:input_1) { true }
27
- let(:input_2) { false }
28
-
29
20
  it '= false' do
21
+ subject.a.set true
22
+ subject.b.set false
30
23
  subject.tick
31
24
  subject.tock
32
- expect(subject[:out].get).to eq(false)
25
+ expect(subject.out.get).to eq false
33
26
  end
34
27
  end
35
28
 
36
29
  context 'false + true' do
37
- let(:input_1) { false }
38
- let(:input_2) { true }
39
-
40
30
  it '= false' do
31
+ subject.a.set false
32
+ subject.b.set true
41
33
  subject.tick
42
34
  subject.tock
43
- expect(subject[:out].get).to eq(false)
35
+ expect(subject.out.get).to eq false
44
36
  end
45
37
  end
46
38
 
47
39
  context 'true + true' do
48
- let(:input_1) { true }
49
- let(:input_2) { true }
50
-
51
40
  it '= false' do
41
+ subject.a.set true
42
+ subject.b.set true
52
43
  subject.tick
53
44
  subject.tock
54
- expect(subject[:out].get).to eq(false)
45
+ expect(subject.out.get).to eq false
55
46
  end
56
47
  end
57
48
  end
49
+
58
50
  [3, 4, 8].each do |n|
59
51
  context "with #{n} inputs" do
60
52
  subject { Circuits::Component::Nor.new input_count: n }
@@ -69,7 +61,7 @@ describe Circuits::Component::Nor do
69
61
  it '= false' do
70
62
  subject.tick
71
63
  subject.tock
72
- expect(subject[:out].get).to eq(false)
64
+ expect(subject.out.get).to eq false
73
65
  end
74
66
  end
75
67
 
@@ -79,7 +71,7 @@ describe Circuits::Component::Nor do
79
71
  it '= true' do
80
72
  subject.tick
81
73
  subject.tock
82
- expect(subject[:out].get).to eq(true)
74
+ expect(subject.out.get).to eq true
83
75
  end
84
76
  end
85
77
 
@@ -95,7 +87,7 @@ describe Circuits::Component::Nor do
95
87
  it '= false' do
96
88
  subject.tick
97
89
  subject.tock
98
- expect(subject[:out].get).to eq(false)
90
+ expect(subject.out.get).to eq false
99
91
  end
100
92
  end
101
93
  end
@@ -5,25 +5,21 @@ describe Circuits::Component::Not do
5
5
  describe '#tick' do
6
6
  subject { Circuits::Component::Not.new }
7
7
 
8
- before { subject[:in].set input }
9
-
10
8
  context '!false' do
11
- let(:input) { false }
12
-
13
9
  it '= true' do
10
+ subject.in.set false
14
11
  subject.tick
15
12
  subject.tock
16
- expect(subject[:out].get).to eq(true)
13
+ expect(subject.out.get).to eq true
17
14
  end
18
15
  end
19
16
 
20
17
  context '!true' do
21
- let(:input) { true }
22
-
23
18
  it '= false' do
19
+ subject.in.set true
24
20
  subject.tick
25
21
  subject.tock
26
- expect(subject[:out].get).to eq(false)
22
+ expect(subject.out.get).to eq false
27
23
  end
28
24
  end
29
25
  end
@@ -6,55 +6,47 @@ describe Circuits::Component::Or do
6
6
  context 'default input count' do
7
7
  subject { Circuits::Component::Or.new }
8
8
 
9
- before do
10
- subject[:a].set input_1
11
- subject[:b].set input_2
12
- end
13
-
14
9
  context 'false + false' do
15
- let(:input_1) { false }
16
- let(:input_2) { false }
17
-
18
10
  it '= false' do
11
+ subject.a.set false
12
+ subject.b.set false
19
13
  subject.tick
20
14
  subject.tock
21
- expect(subject[:out].get).to eq(false)
15
+ expect(subject.out.get).to eq false
22
16
  end
23
17
  end
24
18
 
25
19
  context 'true + false' do
26
- let(:input_1) { true }
27
- let(:input_2) { false }
28
-
29
20
  it '= true' do
21
+ subject.a.set true
22
+ subject.b.set false
30
23
  subject.tick
31
24
  subject.tock
32
- expect(subject[:out].get).to eq(true)
25
+ expect(subject.out.get).to eq true
33
26
  end
34
27
  end
35
28
 
36
29
  context 'false + true' do
37
- let(:input_1) { false }
38
- let(:input_2) { true }
39
-
40
30
  it '= true' do
31
+ subject.a.set false
32
+ subject.b.set true
41
33
  subject.tick
42
34
  subject.tock
43
- expect(subject[:out].get).to eq(true)
35
+ expect(subject.out.get).to eq true
44
36
  end
45
37
  end
46
38
 
47
39
  context 'true + true' do
48
- let(:input_1) { true }
49
- let(:input_2) { true }
50
-
51
40
  it '= true' do
41
+ subject.a.set true
42
+ subject.b.set true
52
43
  subject.tick
53
44
  subject.tock
54
- expect(subject[:out].get).to eq(true)
45
+ expect(subject.out.get).to eq true
55
46
  end
56
47
  end
57
48
  end
49
+
58
50
  [3, 4, 8].each do |n|
59
51
  context "with #{n} inputs" do
60
52
  subject { Circuits::Component::Or.new input_count: n }
@@ -69,7 +61,7 @@ describe Circuits::Component::Or do
69
61
  it '= true' do
70
62
  subject.tick
71
63
  subject.tock
72
- expect(subject[:out].get).to eq(true)
64
+ expect(subject.out.get).to eq true
73
65
  end
74
66
  end
75
67
 
@@ -79,7 +71,7 @@ describe Circuits::Component::Or do
79
71
  it '= false' do
80
72
  subject.tick
81
73
  subject.tock
82
- expect(subject[:out].get).to eq(false)
74
+ expect(subject.out.get).to eq false
83
75
  end
84
76
  end
85
77
 
@@ -95,7 +87,7 @@ describe Circuits::Component::Or do
95
87
  it '= true' do
96
88
  subject.tick
97
89
  subject.tock
98
- expect(subject[:out].get).to eq(true)
90
+ expect(subject.out.get).to eq true
99
91
  end
100
92
  end
101
93
  end
@@ -7,15 +7,15 @@ describe Circuits::Component::SrNand do
7
7
 
8
8
  context 'it has just been initialized' do
9
9
  it 'is unset' do
10
- expect(subject[:q].get).to eq(false)
11
- expect(subject[:not_q].get).to eq(true)
10
+ expect(subject[:q].get).to eq false
11
+ expect(subject[:not_q].get).to eq true
12
12
  end
13
13
 
14
14
  it 'is stable' do
15
15
  subject.tick
16
16
  subject.tock
17
- expect(subject[:q].get).to eq(false)
18
- expect(subject[:not_q].get).to eq(true)
17
+ expect(subject[:q].get).to eq false
18
+ expect(subject[:not_q].get).to eq true
19
19
  end
20
20
  end
21
21
 
@@ -29,23 +29,23 @@ describe Circuits::Component::SrNand do
29
29
  end
30
30
 
31
31
  it 'is set' do
32
- expect(subject[:q].get).to eq(true)
33
- expect(subject[:not_q].get).to eq(false)
32
+ expect(subject[:q].get).to eq true
33
+ expect(subject[:not_q].get).to eq false
34
34
  end
35
35
 
36
36
  it 'is stable' do
37
37
  subject.tick
38
38
  subject.tock
39
- expect(subject[:q].get).to eq(true)
40
- expect(subject[:not_q].get).to eq(false)
39
+ expect(subject[:q].get).to eq true
40
+ expect(subject[:not_q].get).to eq false
41
41
  end
42
42
 
43
43
  it 'can be reset' do
44
44
  subject[:not_r].set false
45
45
  subject.tick
46
46
  subject.tock
47
- expect(subject[:q].get).to eq(false)
48
- expect(subject[:not_q].get).to eq(true)
47
+ expect(subject[:q].get).to eq false
48
+ expect(subject[:not_q].get).to eq true
49
49
  end
50
50
  end
51
51
 
@@ -59,23 +59,23 @@ describe Circuits::Component::SrNand do
59
59
  end
60
60
 
61
61
  it 'is reset' do
62
- expect(subject[:q].get).to eq(false)
63
- expect(subject[:not_q].get).to eq(true)
62
+ expect(subject[:q].get).to eq false
63
+ expect(subject[:not_q].get).to eq true
64
64
  end
65
65
 
66
66
  it 'is stable' do
67
67
  subject.tick
68
68
  subject.tock
69
- expect(subject[:q].get).to eq(false)
70
- expect(subject[:not_q].get).to eq(true)
69
+ expect(subject[:q].get).to eq false
70
+ expect(subject[:not_q].get).to eq true
71
71
  end
72
72
 
73
73
  it 'can be set' do
74
74
  subject[:not_s].set false
75
75
  subject.tick
76
76
  subject.tock
77
- expect(subject[:q].get).to eq(true)
78
- expect(subject[:not_q].get).to eq(false)
77
+ expect(subject[:q].get).to eq true
78
+ expect(subject[:not_q].get).to eq false
79
79
  end
80
80
  end
81
81
  end
@@ -7,15 +7,15 @@ describe Circuits::Component::SrNor do
7
7
 
8
8
  context 'it has just been initialized' do
9
9
  it 'is unset' do
10
- expect(subject[:q].get).to eq(false)
11
- expect(subject[:not_q].get).to eq(true)
10
+ expect(subject[:q].get).to eq false
11
+ expect(subject[:not_q].get).to eq true
12
12
  end
13
13
 
14
14
  it 'is stable' do
15
15
  subject.tick
16
16
  subject.tock
17
- expect(subject[:q].get).to eq(false)
18
- expect(subject[:not_q].get).to eq(true)
17
+ expect(subject[:q].get).to eq false
18
+ expect(subject[:not_q].get).to eq true
19
19
  end
20
20
  end
21
21
 
@@ -29,23 +29,23 @@ describe Circuits::Component::SrNor do
29
29
  end
30
30
 
31
31
  it 'is set' do
32
- expect(subject[:q].get).to eq(true)
33
- expect(subject[:not_q].get).to eq(false)
32
+ expect(subject[:q].get).to eq true
33
+ expect(subject[:not_q].get).to eq false
34
34
  end
35
35
 
36
36
  it 'is stable' do
37
37
  subject.tick
38
38
  subject.tock
39
- expect(subject[:q].get).to eq(true)
40
- expect(subject[:not_q].get).to eq(false)
39
+ expect(subject[:q].get).to eq true
40
+ expect(subject[:not_q].get).to eq false
41
41
  end
42
42
 
43
43
  it 'can be reset' do
44
44
  subject[:r].set true
45
45
  subject.tick
46
46
  subject.tock
47
- expect(subject[:q].get).to eq(false)
48
- expect(subject[:not_q].get).to eq(true)
47
+ expect(subject[:q].get).to eq false
48
+ expect(subject[:not_q].get).to eq true
49
49
  end
50
50
  end
51
51
 
@@ -59,23 +59,23 @@ describe Circuits::Component::SrNor do
59
59
  end
60
60
 
61
61
  it 'is reset' do
62
- expect(subject[:q].get).to eq(false)
63
- expect(subject[:not_q].get).to eq(true)
62
+ expect(subject[:q].get).to eq false
63
+ expect(subject[:not_q].get).to eq true
64
64
  end
65
65
 
66
66
  it 'is stable' do
67
67
  subject.tick
68
68
  subject.tock
69
- expect(subject[:q].get).to eq(false)
70
- expect(subject[:not_q].get).to eq(true)
69
+ expect(subject[:q].get).to eq false
70
+ expect(subject[:not_q].get).to eq true
71
71
  end
72
72
 
73
73
  it 'can be set' do
74
74
  subject[:s].set true
75
75
  subject.tick
76
76
  subject.tock
77
- expect(subject[:q].get).to eq(true)
78
- expect(subject[:not_q].get).to eq(false)
77
+ expect(subject[:q].get).to eq true
78
+ expect(subject[:not_q].get).to eq false
79
79
  end
80
80
  end
81
81
  end
@@ -6,55 +6,47 @@ describe Circuits::Component::Xnor do
6
6
  context 'default input count' do
7
7
  subject { Circuits::Component::Xnor.new }
8
8
 
9
- before do
10
- subject[:a].set input_1
11
- subject[:b].set input_2
12
- end
13
-
14
9
  context 'false + false' do
15
- let(:input_1) { false }
16
- let(:input_2) { false }
17
-
18
10
  it '= true' do
11
+ subject.a.set false
12
+ subject.b.set false
19
13
  subject.tick
20
14
  subject.tock
21
- expect(subject[:out].get).to eq(true)
15
+ expect(subject.out.get).to eq true
22
16
  end
23
17
  end
24
18
 
25
19
  context 'true + false' do
26
- let(:input_1) { true }
27
- let(:input_2) { false }
28
-
29
20
  it '= false' do
21
+ subject.a.set true
22
+ subject.b.set false
30
23
  subject.tick
31
24
  subject.tock
32
- expect(subject[:out].get).to eq(false)
25
+ expect(subject.out.get).to eq false
33
26
  end
34
27
  end
35
28
 
36
29
  context 'false + true' do
37
- let(:input_1) { false }
38
- let(:input_2) { true }
39
-
40
30
  it '= false' do
31
+ subject.a.set false
32
+ subject.b.set true
41
33
  subject.tick
42
34
  subject.tock
43
- expect(subject[:out].get).to eq(false)
35
+ expect(subject.out.get).to eq false
44
36
  end
45
37
  end
46
38
 
47
39
  context 'true + true' do
48
- let(:input_1) { true }
49
- let(:input_2) { true }
50
-
51
40
  it '= true' do
41
+ subject.a.set true
42
+ subject.b.set true
52
43
  subject.tick
53
44
  subject.tock
54
- expect(subject[:out].get).to eq(true)
45
+ expect(subject.out.get).to eq true
55
46
  end
56
47
  end
57
48
  end
49
+
58
50
  context 'when the number of inputs is even' do
59
51
  [2, 4, 8].each do |n|
60
52
  context "with #{n} inputs" do
@@ -70,7 +62,7 @@ describe Circuits::Component::Xnor do
70
62
  it '= true' do
71
63
  subject.tick
72
64
  subject.tock
73
- expect(subject[:out].get).to eq(true)
65
+ expect(subject.out.get).to eq true
74
66
  end
75
67
  end
76
68
 
@@ -80,7 +72,7 @@ describe Circuits::Component::Xnor do
80
72
  it '= true' do
81
73
  subject.tick
82
74
  subject.tock
83
- expect(subject[:out].get).to eq(true)
75
+ expect(subject.out.get).to eq true
84
76
  end
85
77
  end
86
78
 
@@ -96,7 +88,7 @@ describe Circuits::Component::Xnor do
96
88
  it '= false' do
97
89
  subject.tick
98
90
  subject.tock
99
- expect(subject[:out].get).to eq(false)
91
+ expect(subject.out.get).to eq false
100
92
  end
101
93
  end
102
94
  end
@@ -119,7 +111,7 @@ describe Circuits::Component::Xnor do
119
111
  it '= false' do
120
112
  subject.tick
121
113
  subject.tock
122
- expect(subject[:out].get).to eq(false)
114
+ expect(subject.out.get).to eq false
123
115
  end
124
116
  end
125
117
 
@@ -129,7 +121,7 @@ describe Circuits::Component::Xnor do
129
121
  it '= true' do
130
122
  subject.tick
131
123
  subject.tock
132
- expect(subject[:out].get).to eq(true)
124
+ expect(subject.out.get).to eq true
133
125
  end
134
126
  end
135
127
 
@@ -145,7 +137,7 @@ describe Circuits::Component::Xnor do
145
137
  it '= true' do
146
138
  subject.tick
147
139
  subject.tock
148
- expect(subject[:out].get).to eq(true)
140
+ expect(subject.out.get).to eq true
149
141
  end
150
142
  end
151
143
  end
@@ -163,7 +155,7 @@ describe Circuits::Component::Xnor do
163
155
  it '= false' do
164
156
  subject.tick
165
157
  subject.tock
166
- expect(subject[:out].get).to eq(false)
158
+ expect(subject.out.get).to eq false
167
159
  end
168
160
  end
169
161
  end
@@ -6,55 +6,47 @@ describe Circuits::Component::Xor do
6
6
  context 'default input count' do
7
7
  subject { Circuits::Component::Xor.new }
8
8
 
9
- before do
10
- subject[:a].set input_1
11
- subject[:b].set input_2
12
- end
13
-
14
9
  context 'false + false' do
15
- let(:input_1) { false }
16
- let(:input_2) { false }
17
-
18
10
  it '= false' do
11
+ subject.a.set false
12
+ subject.b.set false
19
13
  subject.tick
20
14
  subject.tock
21
- expect(subject[:out].get).to eq(false)
15
+ expect(subject.out.get).to eq false
22
16
  end
23
17
  end
24
18
 
25
19
  context 'true + false' do
26
- let(:input_1) { true }
27
- let(:input_2) { false }
28
-
29
20
  it '= true' do
21
+ subject.a.set true
22
+ subject.b.set false
30
23
  subject.tick
31
24
  subject.tock
32
- expect(subject[:out].get).to eq(true)
25
+ expect(subject.out.get).to eq true
33
26
  end
34
27
  end
35
28
 
36
29
  context 'false + true' do
37
- let(:input_1) { false }
38
- let(:input_2) { true }
39
-
40
30
  it '= true' do
31
+ subject.a.set false
32
+ subject.b.set true
41
33
  subject.tick
42
34
  subject.tock
43
- expect(subject[:out].get).to eq(true)
35
+ expect(subject.out.get).to eq true
44
36
  end
45
37
  end
46
38
 
47
39
  context 'true + true' do
48
- let(:input_1) { true }
49
- let(:input_2) { true }
50
-
51
40
  it '= false' do
41
+ subject.a.set true
42
+ subject.b.set true
52
43
  subject.tick
53
44
  subject.tock
54
- expect(subject[:out].get).to eq(false)
45
+ expect(subject.out.get).to eq false
55
46
  end
56
47
  end
57
48
  end
49
+
58
50
  context 'when the number of inputs is even' do
59
51
  [2, 4, 8].each do |n|
60
52
  context "with #{n} inputs" do
@@ -70,7 +62,7 @@ describe Circuits::Component::Xor do
70
62
  it '= false' do
71
63
  subject.tick
72
64
  subject.tock
73
- expect(subject[:out].get).to eq(false)
65
+ expect(subject.out.get).to eq false
74
66
  end
75
67
  end
76
68
 
@@ -80,7 +72,7 @@ describe Circuits::Component::Xor do
80
72
  it '= false' do
81
73
  subject.tick
82
74
  subject.tock
83
- expect(subject[:out].get).to eq(false)
75
+ expect(subject.out.get).to eq false
84
76
  end
85
77
  end
86
78
 
@@ -96,7 +88,7 @@ describe Circuits::Component::Xor do
96
88
  it '= true' do
97
89
  subject.tick
98
90
  subject.tock
99
- expect(subject[:out].get).to eq(true)
91
+ expect(subject.out.get).to eq true
100
92
  end
101
93
  end
102
94
  end
@@ -119,7 +111,7 @@ describe Circuits::Component::Xor do
119
111
  it '= true' do
120
112
  subject.tick
121
113
  subject.tock
122
- expect(subject[:out].get).to eq(true)
114
+ expect(subject.out.get).to eq true
123
115
  end
124
116
  end
125
117
 
@@ -129,7 +121,7 @@ describe Circuits::Component::Xor do
129
121
  it '= false' do
130
122
  subject.tick
131
123
  subject.tock
132
- expect(subject[:out].get).to eq(false)
124
+ expect(subject.out.get).to eq false
133
125
  end
134
126
  end
135
127
 
@@ -145,7 +137,7 @@ describe Circuits::Component::Xor do
145
137
  it '= false' do
146
138
  subject.tick
147
139
  subject.tock
148
- expect(subject[:out].get).to eq(false)
140
+ expect(subject.out.get).to eq false
149
141
  end
150
142
  end
151
143
  end
@@ -163,7 +155,7 @@ describe Circuits::Component::Xor do
163
155
  it '= true' do
164
156
  subject.tick
165
157
  subject.tock
166
- expect(subject[:out].get).to eq(true)
158
+ expect(subject.out.get).to eq true
167
159
  end
168
160
  end
169
161
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: circuits
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henry Muru Paenga