ant-wireless 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0440d58876178ab22b480c72d95830474b407f7b1b366e518a7733a02abdd857
4
- data.tar.gz: 2e0eb9be083381e57df2b13843894c33f43a957bff10a30fd06654fee41a5085
3
+ metadata.gz: abd16b62c0eb3b3e7e683fd46cca0382fa6b0400f23d8ae8a12de4455e66599a
4
+ data.tar.gz: c0e7b0571d2cb8285f072b23027b226ac4c472e0b2147faa34c1bd13d4c78aef
5
5
  SHA512:
6
- metadata.gz: 8237b0332974c4bc1afc2697b4502bb0048dbc00e6caf3ca4f004bc71a0f854fa997b0239d961dd0a0681dbeb3d3bbc370407c4900812233c6ae0a00fef7dbb1
7
- data.tar.gz: e2e8f4dff3fc5d60181bd1b7a9f8fa3b5e7683d0c56243ffa0c4645cccc2b1692f738e39fc7f09ea63affaa6d126e4e9a254efbcbb624df14f811a78ccf17e72
6
+ metadata.gz: 994058a2faa922f5d5469b9ab04aa5eecefaa6fdac4921a035a9bfe4f0ca58bea90a32f225c54d695f93b5cc27bcaf87ce2442b80160984944e7a04234eb0036
7
+ data.tar.gz: 11f91861b51651d3cfba2309334ac4e9253a4ea9bc313bd0434f42eaa4a86e05d3659b11cfed13a85b162761b1913afb2da13d99faf58f1b14cf53b52fb03da3
checksums.yaml.gz.sig CHANGED
Binary file
data/History.md CHANGED
@@ -1,6 +1,14 @@
1
1
  # Release History for ruby-ant
2
2
 
3
3
  ---
4
+ ## v0.2.1 [2021-09-30] Michael Granger <ged@FaerieMUD.org>
5
+
6
+ Bugfixes:
7
+
8
+ - Add missing files to the manifest
9
+
10
+
11
+
4
12
  ## v0.2.0 [2021-09-22] Michael Granger <ged@FaerieMUD.org>
5
13
 
6
14
  Enhancements:
@@ -0,0 +1,197 @@
1
+ # -*- ruby -*-
2
+ # frozen_string_literal: true
3
+ # vim: set nosta noet ts=4 sw=4:
4
+
5
+ require 'ant' unless defined?( Ant )
6
+
7
+ # Ant::BitVector -- a convenience class for manipulating and
8
+ # comparing bit vectors.
9
+ #
10
+ # This is a slightly-modified version of the same utility in StaticCling.
11
+ #
12
+ # == Synopsis
13
+ #
14
+ # require 'ant/bitvector'
15
+ #
16
+ # vector = Ant::BitVector.new
17
+ #
18
+ # vector.on( 4 ) # => 16
19
+ # vector.on( 12 ) # => 4112
20
+ # vector.toggle( 4 ) # => 4096
21
+ # vector.on?( 4 ) # => false
22
+ # vector.size # => 13
23
+ # vector.to_hex # => 0x1000
24
+ #
25
+ # vector2 = Ant::BitVector.new( 5 )
26
+ # vector > vector2 # => true
27
+ #
28
+ # vector2.each_with_index do |bit, i|
29
+ # puts "Bit %d is %s" % [ i + 1, bit.zero? ? 'off' : 'on' ]
30
+ # end
31
+ #
32
+ # Bit 1 is on
33
+ # Bit 2 is off
34
+ # Bit 3 is on
35
+ #
36
+ # == Version
37
+ #
38
+ # $Id$
39
+ #
40
+ # == Author
41
+ #
42
+ # * Mahlon E. Smith <mahlon@martini.nu>
43
+ #
44
+ # == License
45
+ #
46
+ # Copyright (c) 2000-2013, Mahlon E. Smith <mahlon@martini.nu>
47
+ #
48
+ # All rights reserved.
49
+ #
50
+ # Redistribution and use in source and binary forms, with or without
51
+ # modification, are permitted provided that the following conditions are met:
52
+ #
53
+ # * Redistributions of source code must retain the above copyright notice,
54
+ # this list of conditions and the following disclaimer.
55
+ #
56
+ # * Redistributions in binary form must reproduce the above copyright
57
+ # notice, this list of conditions and the following disclaimer in the
58
+ # documentation and/or other materials provided with the distribution.
59
+ #
60
+ # * Neither the name of the author, nor the names of contributors may be
61
+ # used to endorse or promote products derived from this software without
62
+ # specific prior written permission.
63
+ #
64
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
65
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
66
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
67
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
68
+ # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
69
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
70
+ # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
71
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
72
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
73
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
74
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
75
+ #
76
+ class Ant::BitVector
77
+ include Enumerable,
78
+ Comparable
79
+
80
+ ### Create a new bit vector object, optionally from a pre-existing
81
+ ### +init+ number (Any number that ruby supports natively should be
82
+ ### fine -- 0b, 0x, or decimal.)
83
+ def initialize( init=0 )
84
+ unless init.respond_to?( :to_i )
85
+ raise ArgumentError, "I don't know what to do with a %s object." % [ init.class.name ]
86
+ end
87
+
88
+ @bv = init.to_i
89
+ end
90
+
91
+
92
+ ######
93
+ public
94
+ ######
95
+
96
+ # let any additional methods fall through to Fixnum/Bignum objs,
97
+ # and return new vector objects. This allows for doing bitwise math
98
+ # or simple addition/subtraction on two BitVector objects.
99
+ %w{ % & * ** + - / << >> ^ | ~ }.each do |op|
100
+ define_method( op.to_sym ) do |arg|
101
+ res = @bv.send( op.to_sym, arg.bv )
102
+ return self.class.new( res )
103
+ end
104
+ end
105
+
106
+
107
+ ##
108
+ # Allow external access to the underlying Fixnum/Bignum
109
+ attr_reader :bv
110
+
111
+
112
+ ### Return the bit vector as a decimal.
113
+ def to_i
114
+ return @bv
115
+ end
116
+ alias_method :to_int, :to_i
117
+ alias_method :to_dec, :to_i
118
+
119
+
120
+ ### Return the bit vector as a binary string.
121
+ def to_bin
122
+ return "0b%s" % @bv.to_s(2)
123
+ end
124
+
125
+
126
+ ### Return the bit vector as a hexidecimal string.
127
+ def to_hex
128
+ return "0x%04x" % @bv
129
+ end
130
+
131
+
132
+ ### Return the length of the vector in bytes.
133
+ def size
134
+ return @bv.to_s(2).length
135
+ end
136
+
137
+
138
+ ### Switch a +bit+ on.
139
+ def on( bit )
140
+ @bv = @bv | ( 1 << bit )
141
+ end
142
+
143
+
144
+ ### Return boolean true if given +bit+ is currently on.
145
+ def on?( bit )
146
+ return @bv[ bit ].zero? ? false : true
147
+ end
148
+ alias_method :[], :on?
149
+
150
+
151
+ ### Switch a +bit+ off.
152
+ def off( bit )
153
+ @bv = @bv & ~( 1 << bit )
154
+ end
155
+
156
+
157
+ ### Return boolean true if given +bit+ is currently +off+.
158
+ def off?( bit )
159
+ return ! self.on?( bit )
160
+ end
161
+
162
+
163
+ ### Swap the current state of the given +bit+.
164
+ def toggle( bit )
165
+ @bv = @bv ^ ( 1 << bit )
166
+ end
167
+ alias_method :flip, :toggle
168
+
169
+
170
+ ### Set a +bit+ to +bool+ -- either true (on) or false (off).
171
+ ### Any value other than nil or false is treated as true.
172
+ ### This form also accepts ranges of bits, a la: vector[ 1..4 ] = true
173
+ def []=( bit, bool )
174
+ if bit.respond_to?( :each )
175
+ bit.each { |b| bool ? self.on( b ) : self.off( b ) }
176
+ else
177
+ bool ? self.on( bit ) : self.off( bit )
178
+ end
179
+ end
180
+
181
+
182
+ ### Yield each binary position, least significant +bit+ first.
183
+ def each
184
+ @bv.to_s(2).reverse.each_byte do |bit|
185
+ yield bit.chr.to_i
186
+ end
187
+ end
188
+
189
+
190
+ ### Comparision operator for Comparable mixin, fallthrough to
191
+ ### Fixnum/Bignum. Compares current state against +cmp+.
192
+ def <=>( cmp )
193
+ @bv <=> cmp.bv
194
+ end
195
+
196
+ end # class Ant::BitVector
197
+
data/lib/ant.rb CHANGED
@@ -12,7 +12,7 @@ module Ant
12
12
  extend Loggability
13
13
 
14
14
  # Package version
15
- VERSION = '0.2.0'
15
+ VERSION = '0.2.1'
16
16
 
17
17
  # A Range for matching valid ANT device numbers
18
18
  VALID_DEVICE_NUMBERS = ( 0...65535 ).freeze
@@ -0,0 +1,141 @@
1
+ # -*- ruby -*-
2
+ # frozen_string_literal: true
3
+
4
+ require_relative 'spec_helper'
5
+
6
+ require 'ant/bitvector'
7
+
8
+
9
+ RSpec.describe( Ant::BitVector ) do
10
+
11
+ context 'when first instantiated' do
12
+
13
+ it "is empty when created without arguments" do
14
+ v = described_class.new
15
+ expect( v.to_i ).to eq( 0 )
16
+ expect( v.size ).to eq( 1 )
17
+ end
18
+
19
+
20
+ it "accepts a decimal argument" do
21
+ v = described_class.new( 242 )
22
+ expect( v.to_hex ).to eq( '0x00f2' )
23
+ end
24
+
25
+
26
+ it "accepts a hexadecimal argument" do
27
+ v = described_class.new( 0x00f2 )
28
+ expect( v.to_i ).to eq( 242 )
29
+ end
30
+
31
+
32
+ it "accepts a bit string argument" do
33
+ v = described_class.new( 0b11110010 )
34
+ expect( v.to_i ).to eq( 242 )
35
+ end
36
+
37
+
38
+ it "accepts a different BitVector argument" do
39
+ v = described_class.new( described_class.new( 242 ) )
40
+ expect( v.to_i ).to eq( 242 )
41
+ end
42
+
43
+
44
+ it "accepts a string argument" do
45
+ v = described_class.new( "242" )
46
+ expect( v.to_i ).to eq( 242 )
47
+ end
48
+
49
+
50
+ it "rejects objects that don't have a 'to_i' method" do
51
+ expect {
52
+ described_class.new( Class )
53
+ }.to raise_error( ArgumentError, /don't know what to do/i )
54
+ end
55
+
56
+ end
57
+
58
+
59
+ context 'after modified with a value' do
60
+
61
+ let( :bv ) { described_class.new( 242 ) }
62
+
63
+
64
+ it "can be converted into various formats" do
65
+ expect( bv.to_int ).to eq( 242 )
66
+ expect( bv.to_hex ).to eq( '0x00f2' )
67
+ expect( bv.to_bin ).to eq( '0b11110010' )
68
+ end
69
+
70
+
71
+ it "knows the size of its own bit string" do
72
+ expect( bv.size ).to eq( 8 )
73
+ bv.toggle( 9 )
74
+ expect( bv.size ).to eq( 10 )
75
+ end
76
+
77
+
78
+ it "can switch specific bits on and off" do
79
+ expect( bv.on?( 12 ) ).to be_falsey
80
+
81
+ bv.on( 12 )
82
+ expect( bv[12] ).to be_truthy
83
+
84
+ bv.off( 12 )
85
+ expect( bv.off?( 12 ) ).to be_truthy
86
+
87
+ bv[12] = true
88
+ expect( bv.on?( 12 ) ).to be_truthy
89
+ end
90
+
91
+
92
+ it "can set bits in a range" do
93
+ expect( bv[ 8] ).to be_falsey
94
+ expect( bv[ 9] ).to be_falsey
95
+ expect( bv[10] ).to be_falsey
96
+ expect( bv[11] ).to be_falsey
97
+ expect( bv[12] ).to be_falsey
98
+
99
+ bv[8..12] = true
100
+
101
+ expect( bv[ 8] ).to be_truthy
102
+ expect( bv[ 9] ).to be_truthy
103
+ expect( bv[10] ).to be_truthy
104
+ expect( bv[11] ).to be_truthy
105
+ expect( bv[12] ).to be_truthy
106
+ end
107
+
108
+
109
+ it "delegates math operations to the underlying integer" do
110
+ bv2 = described_class.new( 4112 )
111
+
112
+ bv3 = bv + bv2
113
+ expect( bv3.to_int ).to eq( 4354 )
114
+
115
+ bv3 = bv | bv2
116
+ expect( bv3.to_int ).to eq( 4338 )
117
+
118
+ bv3 = bv & bv2
119
+ expect( bv3.to_int ).to eq( 16 )
120
+
121
+ expect( bv3 ).to be_a( described_class )
122
+ end
123
+
124
+
125
+ it "can compare different bitvector objects" do
126
+ bv1 = described_class.new( bv )
127
+ bv2 = described_class.new( 4112 )
128
+ expect( bv ).to eq( bv1 )
129
+ expect( bv ).to be < bv2
130
+ end
131
+
132
+
133
+ it "is enumerable" do
134
+ bits = bv.to_a
135
+ expect( bits ).to eq( [0, 1, 0, 0, 1, 1, 1, 1] )
136
+ end
137
+
138
+ end
139
+
140
+ end
141
+
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ant-wireless
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Granger
@@ -34,7 +34,7 @@ cert_chain:
34
34
  MCh97sQ/Z/MOusb5+QddBmB+k8EicXyGNl4b5L4XpL7fIQu+Y96TB3JEJlShxFD9
35
35
  k9FjI4d9EP54gS/4
36
36
  -----END CERTIFICATE-----
37
- date: 2021-09-22 00:00:00.000000000 Z
37
+ date: 2021-09-30 00:00:00.000000000 Z
38
38
  dependencies:
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: rake-compiler
@@ -106,6 +106,7 @@ files:
106
106
  - ext/ant_ext/version.h
107
107
  - lib/ant-wireless.rb
108
108
  - lib/ant.rb
109
+ - lib/ant/bitvector.rb
109
110
  - lib/ant/channel.rb
110
111
  - lib/ant/channel/event_callbacks.rb
111
112
  - lib/ant/message.rb
@@ -113,6 +114,7 @@ files:
113
114
  - lib/ant/response_callbacks.rb
114
115
  - lib/ant/wireless.rb
115
116
  - spec/ant_spec.rb
117
+ - spec/bitvector_spec.rb
116
118
  - spec/spec_helper.rb
117
119
  homepage: https://sr.ht/~ged/ruby-ant-wireless/
118
120
  licenses:
metadata.gz.sig CHANGED
Binary file