circuits 0.9.2 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
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