fast_xor 1.1.0 → 1.1.1

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.
Files changed (3) hide show
  1. data/ext/xor/xor.c +1 -0
  2. data/spec/xor_spec.rb +27 -2
  3. metadata +49 -67
data/ext/xor/xor.c CHANGED
@@ -19,6 +19,7 @@ VALUE string_xor( int argc, VALUE *argv, VALUE self ) {
19
19
  return Qnil;
20
20
  }
21
21
 
22
+ rb_str_modify(self);
22
23
  dest = RSTRING_PTR(self);
23
24
  length = RSTRING_LEN(self);
24
25
 
data/spec/xor_spec.rb CHANGED
@@ -9,14 +9,14 @@ describe String do
9
9
  @invx = (0...@len).collect { |i| @x[i].ord ^ 0xFF }.pack('C*')
10
10
  end
11
11
 
12
- it 'XORs two strings' do
12
+ it "two" do
13
13
  @x.dup.xor!(@x) .should == @zero
14
14
  @x.dup.xor!(@invx).should == @one
15
15
  @x.dup.xor!(@zero).should == @x
16
16
  @x.dup.xor!(@one) .should == @invx
17
17
  end
18
18
 
19
- it 'XORs three strings' do
19
+ it "three" do
20
20
  @x.dup.xor!(@x, @x) .should == @x
21
21
  @x.dup.xor!(@x, @invx).should == @invx
22
22
  @x.dup.xor!(@x, @zero).should == @zero
@@ -37,4 +37,29 @@ describe String do
37
37
  @x.dup.xor!(@one, @zero).should == @invx
38
38
  @x.dup.xor!(@one, @one) .should == @x
39
39
  end
40
+
41
+ it "shared" do
42
+ a = 'string'
43
+ b = a
44
+ b.xor!(@x)
45
+ b.should == a
46
+ end
47
+
48
+ it "embedded" do
49
+ a = 'an embedded string'
50
+ a.length.should <= 23
51
+
52
+ b = a.dup
53
+ b.xor!(@x)
54
+ b.should_not == a
55
+ end
56
+
57
+ it "heap" do
58
+ a = 'a very long string, stored on the heap'
59
+ a.length.should > 24
60
+
61
+ b = a.dup
62
+ b.xor!(@x*2)
63
+ b.should_not == a
64
+ end
40
65
  end
metadata CHANGED
@@ -1,111 +1,93 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: fast_xor
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 1
8
- - 0
9
- version: 1.1.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.1
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Steve Sloan
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2010-10-29 00:00:00 -07:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-07-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rake
22
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &17550840 !ruby/object:Gem::Requirement
23
17
  none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
30
22
  type: :runtime
31
23
  prerelease: false
32
- version_requirements: *id001
33
- - !ruby/object:Gem::Dependency
24
+ version_requirements: *17550840
25
+ - !ruby/object:Gem::Dependency
34
26
  name: rake-compiler
35
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ requirement: &17550400 !ruby/object:Gem::Requirement
36
28
  none: false
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- segments:
41
- - 0
42
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
43
33
  type: :runtime
44
34
  prerelease: false
45
- version_requirements: *id002
46
- - !ruby/object:Gem::Dependency
35
+ version_requirements: *17550400
36
+ - !ruby/object:Gem::Dependency
47
37
  name: rspec
48
- requirement: &id003 !ruby/object:Gem::Requirement
38
+ requirement: &17549940 !ruby/object:Gem::Requirement
49
39
  none: false
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- segments:
54
- - 2
55
- - 0
56
- - 1
57
- version: 2.0.1
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
58
44
  type: :development
59
45
  prerelease: false
60
- version_requirements: *id003
46
+ version_requirements: *17549940
61
47
  description: Provides a C-optimized method for in-place XORing of two (or three) strings
62
48
  email: steve@finagle.org
63
49
  executables: []
64
-
65
- extensions:
50
+ extensions:
66
51
  - ext/xor/extconf.rb
67
- extra_rdoc_files:
52
+ extra_rdoc_files:
68
53
  - README.rdoc
69
- files:
54
+ files:
70
55
  - MIT-LICENSE
71
56
  - README.rdoc
72
57
  - benchmark
73
58
  - ext/xor/xor.c
74
59
  - ext/xor/extconf.rb
75
60
  - spec/xor_spec.rb
76
- has_rdoc: true
77
61
  homepage: http://github.com/CodeMonkeySteve/fast_xor
78
62
  licenses: []
79
-
80
63
  post_install_message:
81
- rdoc_options:
64
+ rdoc_options:
82
65
  - --charset=UTF-8
83
- require_paths:
66
+ require_paths:
84
67
  - lib/fast_xor
85
- required_ruby_version: !ruby/object:Gem::Requirement
68
+ required_ruby_version: !ruby/object:Gem::Requirement
86
69
  none: false
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- hash: 1119320670912771159
91
- segments:
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ segments:
92
75
  - 0
93
- version: "0"
94
- required_rubygems_version: !ruby/object:Gem::Requirement
76
+ hash: -1801665792831442865
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
78
  none: false
96
- requirements:
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- hash: 1119320670912771159
100
- segments:
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ segments:
101
84
  - 0
102
- version: "0"
85
+ hash: -1801665792831442865
103
86
  requirements: []
104
-
105
87
  rubyforge_project:
106
- rubygems_version: 1.3.7
88
+ rubygems_version: 1.8.16
107
89
  signing_key:
108
90
  specification_version: 3
109
91
  summary: Fast String XOR operator
110
- test_files:
92
+ test_files:
111
93
  - spec/xor_spec.rb