base_convert 0.0.2 → 1.0.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 +4 -4
 - data/History.txt +3 -0
 - data/README.rdoc +133 -0
 - data/TODO.txt +3 -0
 - data/base_convert.gemspec +55 -0
 - data/lib/base_convert.rb +7 -58
 - data/lib/base_convert/base_convert.rb +35 -0
 - data/lib/base_convert/config.rb +27 -0
 - data/lib/base_convert/functions.rb +25 -0
 - data/lib/base_convert/helpers.rb +37 -0
 - data/lib/base_convert/number.rb +31 -0
 - data/lib/base_convert/version.rb +3 -0
 - data/test/test_base_convert.rb +56 -0
 - data/test/test_functions.rb +34 -0
 - data/test/test_helpers.rb +99 -0
 - data/test/test_number.rb +21 -0
 - data/test/test_original.rb +47 -0
 - data/test/test_original2.rb +66 -0
 - data/test/test_trivial.rb +48 -0
 - metadata +59 -13
 - data/README.txt +0 -84
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: e38bf64a72b3127b158c244a87a65176db358c21
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 1dc82bdddee617c3fe44e2c125a33b15641a346f
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 44c73f5bb7180fbecaaba4cc1936a339019ddbc367a76a30e815cbee9a0ce13d1235e2b86d5bca6e65fc3b3f3c1a1fba7a21e4dcad5eceb806a2b4e14e705e15
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 11c95ca5dd520a33e7c61da20c29c42e8adcb80da99030efcdfeb8d16cc7b63fa972dff21510a1105dbf4eafc911dfcfaf42eaf33569b88f4445c62caf9c2595
         
     | 
    
        data/History.txt
    ADDED
    
    
    
        data/README.rdoc
    ADDED
    
    | 
         @@ -0,0 +1,133 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            = base_convert
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            github :: https://www.github.com/carlosjhr64/base_convert
         
     | 
| 
      
 4 
     | 
    
         
            +
            rubygems :: https://rubygems.org/gems/base_convert
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            == DESCRIPTION:
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            base_convert - Number base conversion.
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            Converts positive integers to different bases:
         
     | 
| 
      
 11 
     | 
    
         
            +
            Binary, octal, hexadecimal, decimal, or any arbitrary base.
         
     | 
| 
      
 12 
     | 
    
         
            +
            "Out of the box" handling of up to base 91.
         
     | 
| 
      
 13 
     | 
    
         
            +
            Allows for arbitrary choice of alphabet(digits).
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            See also Non-decimal_radices/Convert[http://rosettacode.org/wiki/Non-decimal_radices/Convert].
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            == SYNOPSIS:
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                require 'base_convert'
         
     | 
| 
      
 20 
     | 
    
         
            +
                include BASE_CONVERT
         
     | 
| 
      
 21 
     | 
    
         
            +
                h2o = BaseConvert.new(16, 8)
         
     | 
| 
      
 22 
     | 
    
         
            +
                o2h = BaseConvert.new(8, 16)
         
     | 
| 
      
 23 
     | 
    
         
            +
                puts h2o.convert('FFFF') #=> "177777"
         
     | 
| 
      
 24 
     | 
    
         
            +
                puts o2h.convert('177777') #=> "FFFF"
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            == BUT WAIT, THERE'S MORE:
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            Using `irb` to demonstrate the features.
         
     | 
| 
      
 29 
     | 
    
         
            +
            The components are scoped under `BASE_CONVERT`:
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                # irb
         
     | 
| 
      
 32 
     | 
    
         
            +
                # Welcome to IRB...
         
     | 
| 
      
 33 
     | 
    
         
            +
                require 'base_convert' #=> true
         
     | 
| 
      
 34 
     | 
    
         
            +
                include BASE_CONVERT #=> Object
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            `base_convert` provides three ways to convert a string representation of a number.
         
     | 
| 
      
 37 
     | 
    
         
            +
            The first is functional.  One can extend(import) the functions that do the conversions.
         
     | 
| 
      
 38 
     | 
    
         
            +
            The conversion functions are `to_integer` and `to_base`.
         
     | 
| 
      
 39 
     | 
    
         
            +
            For example, the octal number "7777":
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                extend FUNCTIONS #=> main
         
     | 
| 
      
 42 
     | 
    
         
            +
                digits = ['0','1','2','3','4','5','6','7']
         
     | 
| 
      
 43 
     | 
    
         
            +
                base = digits.length #=> 8
         
     | 
| 
      
 44 
     | 
    
         
            +
                to_integer('7777', base, digits) #=> 4095
         
     | 
| 
      
 45 
     | 
    
         
            +
                to_base(4095, base, digits) #=> "7777"
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            You can work with arbitrary digits:
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                digits = [')','!','@','#','$','%','^','&']
         
     | 
| 
      
 50 
     | 
    
         
            +
                base = digits.length #=> 8
         
     | 
| 
      
 51 
     | 
    
         
            +
                to_integer('&&&&', base, digits) #=> 4095
         
     | 
| 
      
 52 
     | 
    
         
            +
                to_base(4095, base, digits) #=> "&&&&"
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            For convenience, `base_convert` provides two sets of digits.
         
     | 
| 
      
 55 
     | 
    
         
            +
            `WORD` are the ASCII word characters except underscore[_].
         
     | 
| 
      
 56 
     | 
    
         
            +
            `QGRAPH` are the ASCII graph characters except quotes['"].
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                CONFIG::WORD #=> ["0","1",... "A","B",... "a","b",... "y","z"]
         
     | 
| 
      
 59 
     | 
    
         
            +
                CONFIG::QGRAPH #=> ["!", "#",... "0","1",... "A","B",... "a","b",...  "}", "~"]
         
     | 
| 
      
 60 
     | 
    
         
            +
                to_base(4095, 8, CONFIG::WORD) #=> "7777"
         
     | 
| 
      
 61 
     | 
    
         
            +
                to_base(4095, 8, CONFIG::QGRAPH) #=> "****"
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            The second way to convert is via a conversion object of `BASE_CONVERT::BaseConvert`.
         
     | 
| 
      
 64 
     | 
    
         
            +
            For example, to convert from hexadecimal to octal, and back:
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                h2o = BaseConvert.new(16, 8)
         
     | 
| 
      
 67 
     | 
    
         
            +
                o2h = BaseConvert.new(8, 16)
         
     | 
| 
      
 68 
     | 
    
         
            +
                h2o.convert('FFFF') #=> "177777"
         
     | 
| 
      
 69 
     | 
    
         
            +
                o2h.convert('177777') #=> "FFFF"
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            You can access the conversion alphabets via
         
     | 
| 
      
 72 
     | 
    
         
            +
            the accessors BaseConvert#from_digits and BaseConvert#to_digits.
         
     | 
| 
      
 73 
     | 
    
         
            +
            By default, WORD is used for bases upto 62.
         
     | 
| 
      
 74 
     | 
    
         
            +
            For bigger bases upto 91, QGRAPH is used.
         
     | 
| 
      
 75 
     | 
    
         
            +
            You can have bigger bases, but
         
     | 
| 
      
 76 
     | 
    
         
            +
            you will need to come up with a bigger alphabet, perhaps
         
     | 
| 
      
 77 
     | 
    
         
            +
            by adding greek letters.
         
     | 
| 
      
 78 
     | 
    
         
            +
            Note that when there's no ambiguity while using WORD,
         
     | 
| 
      
 79 
     | 
    
         
            +
            BaseConvert will upcase the string.
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                h2o.convert('FFFF') #=> "177777"
         
     | 
| 
      
 82 
     | 
    
         
            +
                h2o.convert('ffff') #=> "177777"
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            BaseConvert also make avalable the  intermediary methods that works with integers,
         
     | 
| 
      
 85 
     | 
    
         
            +
            BaseConvert#base2integer and BaseConvert#integer2Base:
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                h2o.base2integer('FFFF') #=> 65535
         
     | 
| 
      
 88 
     | 
    
         
            +
                h2o.integer2base(65535) #=> "177777"
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
            The above replaces #base2dec and #dec2base which are now aliases and are deprecated.
         
     | 
| 
      
 91 
     | 
    
         
            +
            The third way to convert is via the subclass of String, `BASE_CONVERT::Number`:
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                hexadecimal = Number.new('FFFF', 16, CONFIG::WORD) #=> "FFFF"
         
     | 
| 
      
 94 
     | 
    
         
            +
                # WORD is the default alphabet
         
     | 
| 
      
 95 
     | 
    
         
            +
                hexadecimal = Number.new('FFFF', 16) #=> "FFFF"
         
     | 
| 
      
 96 
     | 
    
         
            +
                hexadecimal.to_integer #=> 65535
         
     | 
| 
      
 97 
     | 
    
         
            +
                # Base 10 the default
         
     | 
| 
      
 98 
     | 
    
         
            +
                decimal = Number.new('65535') # "65535"
         
     | 
| 
      
 99 
     | 
    
         
            +
                decimal.to_integer #=> 65535
         
     | 
| 
      
 100 
     | 
    
         
            +
                decimal.to_base(16) #=> "FFFF"
         
     | 
| 
      
 101 
     | 
    
         
            +
                decimal.to_base(8) #=> "177777"
         
     | 
| 
      
 102 
     | 
    
         
            +
                # You can also specify the digits to use
         
     | 
| 
      
 103 
     | 
    
         
            +
                digits = [')','!','@','#','$','%','^','&']
         
     | 
| 
      
 104 
     | 
    
         
            +
                decimal.to_base(8, digits) #=> "!&&&&&"
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
            == INSTALL:
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
              $ sudo gem install base_convert
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
            == LICENSE:
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
            (The MIT License)
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
            Copyright (c) 2014 CarlosJHR64
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
            Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
      
 117 
     | 
    
         
            +
            a copy of this software and associated documentation files (the
         
     | 
| 
      
 118 
     | 
    
         
            +
            'Software'), to deal in the Software without restriction, including
         
     | 
| 
      
 119 
     | 
    
         
            +
            without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
      
 120 
     | 
    
         
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
      
 121 
     | 
    
         
            +
            permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
      
 122 
     | 
    
         
            +
            the following conditions:
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
            The above copyright notice and this permission notice shall be
         
     | 
| 
      
 125 
     | 
    
         
            +
            included in all copies or substantial portions of the Software.
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
            THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
      
 128 
     | 
    
         
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
      
 129 
     | 
    
         
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
         
     | 
| 
      
 130 
     | 
    
         
            +
            IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
         
     | 
| 
      
 131 
     | 
    
         
            +
            CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
         
     | 
| 
      
 132 
     | 
    
         
            +
            TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
         
     | 
| 
      
 133 
     | 
    
         
            +
            SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
    
        data/TODO.txt
    ADDED
    
    
| 
         @@ -0,0 +1,55 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Gem::Specification.new do |s|
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              s.name     = 'base_convert'
         
     | 
| 
      
 4 
     | 
    
         
            +
              s.version  = '1.0.0'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              s.homepage = 'https://github.com/carlosjhr64/base_convert'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              s.author   = 'CarlosJHR64'
         
     | 
| 
      
 9 
     | 
    
         
            +
              s.email    = 'carlosjhr64@gmail.com'
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              s.date     = '2014-02-13'
         
     | 
| 
      
 12 
     | 
    
         
            +
              s.licenses = ['MIT']
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              s.description = <<DESCRIPTION
         
     | 
| 
      
 15 
     | 
    
         
            +
            base_convert - Number base conversion.
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            Converts positive integers to different bases:
         
     | 
| 
      
 18 
     | 
    
         
            +
            Binary, octal, hexadecimal, decimal, or any arbitrary base.
         
     | 
| 
      
 19 
     | 
    
         
            +
            "Out of the box" handling of up to base 91.
         
     | 
| 
      
 20 
     | 
    
         
            +
            Allows for arbitrary choice of alphabet(digits).
         
     | 
| 
      
 21 
     | 
    
         
            +
            DESCRIPTION
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              s.summary = <<SUMMARY
         
     | 
| 
      
 24 
     | 
    
         
            +
            base_convert - Number base conversion.
         
     | 
| 
      
 25 
     | 
    
         
            +
            SUMMARY
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              s.extra_rdoc_files = ['README.rdoc']
         
     | 
| 
      
 28 
     | 
    
         
            +
              s.rdoc_options     = ["--main", "README.rdoc"]
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              s.require_paths = ["lib"]
         
     | 
| 
      
 31 
     | 
    
         
            +
              s.files = %w(
         
     | 
| 
      
 32 
     | 
    
         
            +
            History.txt
         
     | 
| 
      
 33 
     | 
    
         
            +
            README.rdoc
         
     | 
| 
      
 34 
     | 
    
         
            +
            TODO.txt
         
     | 
| 
      
 35 
     | 
    
         
            +
            base_convert.gemspec
         
     | 
| 
      
 36 
     | 
    
         
            +
            lib/base_convert.rb
         
     | 
| 
      
 37 
     | 
    
         
            +
            lib/base_convert/base_convert.rb
         
     | 
| 
      
 38 
     | 
    
         
            +
            lib/base_convert/config.rb
         
     | 
| 
      
 39 
     | 
    
         
            +
            lib/base_convert/functions.rb
         
     | 
| 
      
 40 
     | 
    
         
            +
            lib/base_convert/helpers.rb
         
     | 
| 
      
 41 
     | 
    
         
            +
            lib/base_convert/number.rb
         
     | 
| 
      
 42 
     | 
    
         
            +
            lib/base_convert/version.rb
         
     | 
| 
      
 43 
     | 
    
         
            +
            test/test_base_convert.rb
         
     | 
| 
      
 44 
     | 
    
         
            +
            test/test_functions.rb
         
     | 
| 
      
 45 
     | 
    
         
            +
            test/test_helpers.rb
         
     | 
| 
      
 46 
     | 
    
         
            +
            test/test_number.rb
         
     | 
| 
      
 47 
     | 
    
         
            +
            test/test_original.rb
         
     | 
| 
      
 48 
     | 
    
         
            +
            test/test_original2.rb
         
     | 
| 
      
 49 
     | 
    
         
            +
            test/test_trivial.rb
         
     | 
| 
      
 50 
     | 
    
         
            +
              )
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
              s.add_development_dependency 'test-unit', '~> 2.5', '>= 2.5.5'
         
     | 
| 
      
 53 
     | 
    
         
            +
              s.requirements << 'ruby: ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]'
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/base_convert.rb
    CHANGED
    
    | 
         @@ -1,58 +1,7 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
            	:qgraph		=> QGRAPH.length,
         
     | 
| 
       9 
     | 
    
         
            -
            	:hexadecimal	=> 16,
         
     | 
| 
       10 
     | 
    
         
            -
            	:hex		=> 16,
         
     | 
| 
       11 
     | 
    
         
            -
            	:decimal	=> 10,
         
     | 
| 
       12 
     | 
    
         
            -
            	:dec		=> 10,
         
     | 
| 
       13 
     | 
    
         
            -
            	:octal		=> 8,
         
     | 
| 
       14 
     | 
    
         
            -
            	:oct		=> 8,
         
     | 
| 
       15 
     | 
    
         
            -
            	:binary		=> 2,
         
     | 
| 
       16 
     | 
    
         
            -
              }
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
              attr_accessor :from_digits, :to_digits
         
     | 
| 
       19 
     | 
    
         
            -
              def initialize(basefrom,baseto=nil)
         
     | 
| 
       20 
     | 
    
         
            -
                baseto = basefrom if baseto.nil?
         
     | 
| 
       21 
     | 
    
         
            -
                @basefrom		= BASE[basefrom]	|| basefrom
         
     | 
| 
       22 
     | 
    
         
            -
                @baseto		= BASE[baseto]		|| baseto
         
     | 
| 
       23 
     | 
    
         
            -
                dl = DIGITS.length
         
     | 
| 
       24 
     | 
    
         
            -
                @from_digits	= ((basefrom == :qgraph) || (@basefrom > dl))? QGRAPH : DIGITS
         
     | 
| 
       25 
     | 
    
         
            -
                @to_digits		= ((baseto   == :qgraph) || (@baseto > dl))? QGRAPH : DIGITS
         
     | 
| 
       26 
     | 
    
         
            -
              end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
              def convert(str)
         
     | 
| 
       29 
     | 
    
         
            -
                if str.class == String
         
     | 
| 
       30 
     | 
    
         
            -
                  dec = base2dec(str)
         
     | 
| 
       31 
     | 
    
         
            -
                  return (@baseto == @basefrom)? dec : dec2base(dec)
         
     | 
| 
       32 
     | 
    
         
            -
                end
         
     | 
| 
       33 
     | 
    
         
            -
                dec2base(str)
         
     | 
| 
       34 
     | 
    
         
            -
              end
         
     | 
| 
       35 
     | 
    
         
            -
             
         
     | 
| 
       36 
     | 
    
         
            -
              def base2dec(str)
         
     | 
| 
       37 
     | 
    
         
            -
                str = str.upcase if @basefrom < 37
         
     | 
| 
       38 
     | 
    
         
            -
                raise ArgumentError, "base is invalid" unless @basefrom.between?(2, @from_digits.length)
         
     | 
| 
       39 
     | 
    
         
            -
                res = 0
         
     | 
| 
       40 
     | 
    
         
            -
                str.to_s.each_char do |c|
         
     | 
| 
       41 
     | 
    
         
            -
                  idx = @from_digits[0,@basefrom].find_index(c)
         
     | 
| 
       42 
     | 
    
         
            -
                  idx.nil? and raise ArgumentError, "invalid base-#{@basefrom} digit: #{c}"
         
     | 
| 
       43 
     | 
    
         
            -
                  res = res * @basefrom + idx
         
     | 
| 
       44 
     | 
    
         
            -
                end
         
     | 
| 
       45 
     | 
    
         
            -
                res
         
     | 
| 
       46 
     | 
    
         
            -
              end
         
     | 
| 
       47 
     | 
    
         
            -
             
         
     | 
| 
       48 
     | 
    
         
            -
              def dec2base(n)
         
     | 
| 
       49 
     | 
    
         
            -
                return @to_digits.first if n == 0
         
     | 
| 
       50 
     | 
    
         
            -
                raise ArgumentError, "base is invalid" unless @baseto.between?(2, @to_digits.length)
         
     | 
| 
       51 
     | 
    
         
            -
                res = []
         
     | 
| 
       52 
     | 
    
         
            -
                while n > 0
         
     | 
| 
       53 
     | 
    
         
            -
                  n, r = n.divmod(@baseto)
         
     | 
| 
       54 
     | 
    
         
            -
                  res.unshift(@to_digits[r])
         
     | 
| 
       55 
     | 
    
         
            -
                end
         
     | 
| 
       56 
     | 
    
         
            -
                res.join("") 
         
     | 
| 
       57 
     | 
    
         
            -
              end
         
     | 
| 
       58 
     | 
    
         
            -
            end
         
     | 
| 
      
 1 
     | 
    
         
            +
            require 'base_convert/version'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'base_convert/config'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'base_convert/functions'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'base_convert/helpers'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'base_convert/number'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'base_convert/base_convert'
         
     | 
| 
      
 7 
     | 
    
         
            +
            #`ruby`
         
     | 
| 
         @@ -0,0 +1,35 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module BASE_CONVERT
         
     | 
| 
      
 2 
     | 
    
         
            +
            class BaseConvert
         
     | 
| 
      
 3 
     | 
    
         
            +
              include CONFIG
         
     | 
| 
      
 4 
     | 
    
         
            +
              extend FUNCTIONS
         
     | 
| 
      
 5 
     | 
    
         
            +
              extend HELPERS
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              attr_accessor :from_digits, :to_digits
         
     | 
| 
      
 8 
     | 
    
         
            +
              def initialize(basefrom, baseto=basefrom)
         
     | 
| 
      
 9 
     | 
    
         
            +
                @basefrom    = BaseConvert.base(basefrom)
         
     | 
| 
      
 10 
     | 
    
         
            +
                @baseto      = BaseConvert.base(baseto)
         
     | 
| 
      
 11 
     | 
    
         
            +
                @from_digits = BaseConvert.digits(basefrom)
         
     | 
| 
      
 12 
     | 
    
         
            +
                @to_digits   = BaseConvert.digits(baseto)
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                BaseConvert.validate(@baseto, @to_digits)
         
     | 
| 
      
 15 
     | 
    
         
            +
                BaseConvert.validate(@basefrom, @from_digits)
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
         
     | 
| 
      
 18 
     | 
    
         
            +
              def base2integer(string)
         
     | 
| 
      
 19 
     | 
    
         
            +
                string = string.upcase if BaseConvert.upcase?(@basefrom, @from_digits) # covenience
         
     | 
| 
      
 20 
     | 
    
         
            +
                BaseConvert.validate_string(string, @basefrom, @from_digits)
         
     | 
| 
      
 21 
     | 
    
         
            +
                BaseConvert.to_integer(string, @basefrom, @from_digits)
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
              alias base2dec base2integer 
         
     | 
| 
      
 24 
     | 
    
         
            +
             
         
     | 
| 
      
 25 
     | 
    
         
            +
              def integer2base(integer)
         
     | 
| 
      
 26 
     | 
    
         
            +
                BaseConvert.to_base(integer, @baseto, @to_digits)
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
              alias dec2base integer2base
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              def convert(string)
         
     | 
| 
      
 31 
     | 
    
         
            +
                integer2base base2integer string.to_s
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            end
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module BASE_CONVERT
         
     | 
| 
      
 2 
     | 
    
         
            +
            module CONFIG
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              QGRAPH = 0.upto(255).map{|i| i.chr}.select{|c| c=~/[[:graph:]]/ && c=~/[^`'"]/}
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              WORD   = 0.upto(255).map{|i| i.chr}.select{|c| c=~/\w/ && c=~/[^_]/} # 0..9 a..z A..Z
         
     | 
| 
      
 7 
     | 
    
         
            +
              INDEXa = WORD.find_index('a')
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              BASE = {
         
     | 
| 
      
 10 
     | 
    
         
            +
                :word        => WORD.length,
         
     | 
| 
      
 11 
     | 
    
         
            +
                :qgraph      => QGRAPH.length,
         
     | 
| 
      
 12 
     | 
    
         
            +
                :hexadecimal => 16,
         
     | 
| 
      
 13 
     | 
    
         
            +
                :hex         => 16,
         
     | 
| 
      
 14 
     | 
    
         
            +
                :decimal     => 10,
         
     | 
| 
      
 15 
     | 
    
         
            +
                :dec         => 10,
         
     | 
| 
      
 16 
     | 
    
         
            +
                :octal       => 8,
         
     | 
| 
      
 17 
     | 
    
         
            +
                :oct         => 8,
         
     | 
| 
      
 18 
     | 
    
         
            +
                :binary      => 2,
         
     | 
| 
      
 19 
     | 
    
         
            +
              }
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              DIGITS = {
         
     | 
| 
      
 22 
     | 
    
         
            +
                :word   => WORD,
         
     | 
| 
      
 23 
     | 
    
         
            +
                :qgraph => QGRAPH,
         
     | 
| 
      
 24 
     | 
    
         
            +
              }
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
      
 27 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # http://rosettacode.org/wiki/Non-decimal_radices/Convert#Ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            module BASE_CONVERT
         
     | 
| 
      
 3 
     | 
    
         
            +
            module FUNCTIONS
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              def to_integer(string, base, digits)
         
     | 
| 
      
 6 
     | 
    
         
            +
                integer = 0
         
     | 
| 
      
 7 
     | 
    
         
            +
                string.each_char do |c|
         
     | 
| 
      
 8 
     | 
    
         
            +
                  index = digits.find_index(c)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  integer = integer * base + index
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
                integer
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def to_base(integer, base, digits)
         
     | 
| 
      
 15 
     | 
    
         
            +
                return digits.first if integer == 0
         
     | 
| 
      
 16 
     | 
    
         
            +
                string = ''
         
     | 
| 
      
 17 
     | 
    
         
            +
                while integer > 0
         
     | 
| 
      
 18 
     | 
    
         
            +
                  integer, index = integer.divmod(base)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  string = string.insert(0, digits[index])
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
                string
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,37 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # http://rosettacode.org/wiki/Non-decimal_radices/Convert#Ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            module BASE_CONVERT
         
     | 
| 
      
 3 
     | 
    
         
            +
            module HELPERS
         
     | 
| 
      
 4 
     | 
    
         
            +
              include CONFIG
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              def upcase?(base, digits)
         
     | 
| 
      
 7 
     | 
    
         
            +
                base <= INDEXa and digits.equal?(WORD)
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def validate(base, digits)
         
     | 
| 
      
 11 
     | 
    
         
            +
                raise 'base is not an integer' unless base.kind_of?(Integer)
         
     | 
| 
      
 12 
     | 
    
         
            +
                raise 'digits not an Array'    unless digits.kind_of?(Array)
         
     | 
| 
      
 13 
     | 
    
         
            +
                raise 'base not between 2 and digits.length' unless base.between?(2, digits.length)
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              def validate_string(string, base, digits)
         
     | 
| 
      
 17 
     | 
    
         
            +
                string.chars.uniq.each do |c|
         
     | 
| 
      
 18 
     | 
    
         
            +
                  raise 'String has invalid character' unless (i=digits.find_index(c)) and (i<base)
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              def digits(base)
         
     | 
| 
      
 23 
     | 
    
         
            +
                if base.class == Symbol
         
     | 
| 
      
 24 
     | 
    
         
            +
                  if digits = DIGITS[base]
         
     | 
| 
      
 25 
     | 
    
         
            +
                    return digits
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  base = BASE[base]
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
                (base > WORD.length)? QGRAPH : WORD
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              def base(base)
         
     | 
| 
      
 33 
     | 
    
         
            +
                (base.class == Symbol)? BASE[base]: base
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module BASE_CONVERT
         
     | 
| 
      
 2 
     | 
    
         
            +
            class Number < String
         
     | 
| 
      
 3 
     | 
    
         
            +
              include CONFIG
         
     | 
| 
      
 4 
     | 
    
         
            +
              extend FUNCTIONS
         
     | 
| 
      
 5 
     | 
    
         
            +
              extend HELPERS
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              def initialize(counter, base=10, digits=Number.digits(base), validate=true)
         
     | 
| 
      
 8 
     | 
    
         
            +
                super(counter.to_s)
         
     | 
| 
      
 9 
     | 
    
         
            +
                @base   = Number.base(base)
         
     | 
| 
      
 10 
     | 
    
         
            +
                @digits = digits
         
     | 
| 
      
 11 
     | 
    
         
            +
                if validate
         
     | 
| 
      
 12 
     | 
    
         
            +
                  self.upcase! if Number.upcase?(@base, @digits)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  Number.validate(@base, @digits)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  Number.validate_string(self, @base, @digits)
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              def to_integer
         
     | 
| 
      
 19 
     | 
    
         
            +
                Number.to_integer(self, @base, @digits)
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              def to_base(base, digits=Number.digits(base), validate=true)
         
     | 
| 
      
 23 
     | 
    
         
            +
                base   = Number.base(base)
         
     | 
| 
      
 24 
     | 
    
         
            +
                Number.validate(base, digits) if validate
         
     | 
| 
      
 25 
     | 
    
         
            +
                integer = self.to_integer
         
     | 
| 
      
 26 
     | 
    
         
            +
                string = Number.to_base(integer, base, digits)
         
     | 
| 
      
 27 
     | 
    
         
            +
                Number.new(string, base, digits, false) # no need to validate
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,56 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'base_convert'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class TestBaseConvert < Test::Unit::TestCase
         
     | 
| 
      
 5 
     | 
    
         
            +
              include BASE_CONVERT
         
     | 
| 
      
 6 
     | 
    
         
            +
              include CONFIG
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def test_001_new
         
     | 
| 
      
 9 
     | 
    
         
            +
                wl = WORD.length
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                base = BaseConvert.new(10, 16)
         
     | 
| 
      
 12 
     | 
    
         
            +
                assert base.from_digits.equal?(WORD)
         
     | 
| 
      
 13 
     | 
    
         
            +
                assert base.to_digits.equal?(WORD)
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                base = BaseConvert.new(70, 8)
         
     | 
| 
      
 16 
     | 
    
         
            +
                assert base.from_digits.equal?(QGRAPH)
         
     | 
| 
      
 17 
     | 
    
         
            +
                assert base.to_digits.equal?(WORD)
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                base = BaseConvert.new(wl, 90)
         
     | 
| 
      
 20 
     | 
    
         
            +
                assert base.from_digits.equal?(WORD)
         
     | 
| 
      
 21 
     | 
    
         
            +
                assert base.to_digits.equal?(QGRAPH)
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                base = BaseConvert.new(wl+1, wl+2)
         
     | 
| 
      
 24 
     | 
    
         
            +
                assert base.from_digits.equal?(QGRAPH)
         
     | 
| 
      
 25 
     | 
    
         
            +
                assert base.to_digits.equal?(QGRAPH)
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                base = BaseConvert.new(:word, :qgraph)
         
     | 
| 
      
 28 
     | 
    
         
            +
                assert base.from_digits.equal?(WORD)
         
     | 
| 
      
 29 
     | 
    
         
            +
                assert base.to_digits.equal?(QGRAPH)
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                base = BaseConvert.new(:qgraph, :word)
         
     | 
| 
      
 32 
     | 
    
         
            +
                assert base.from_digits.equal?(QGRAPH)
         
     | 
| 
      
 33 
     | 
    
         
            +
                assert base.to_digits.equal?(WORD)
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                a = base.base2integer('z')
         
     | 
| 
      
 36 
     | 
    
         
            +
                assert_equal(Fixnum, a.class)
         
     | 
| 
      
 37 
     | 
    
         
            +
                assert_equal(86, a)
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                a = base.integer2base(16)
         
     | 
| 
      
 40 
     | 
    
         
            +
                assert_equal(String, a.class)
         
     | 
| 
      
 41 
     | 
    
         
            +
                assert_equal('G', a)
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                a = base.convert('z')
         
     | 
| 
      
 44 
     | 
    
         
            +
                assert_equal(String, a.class)
         
     | 
| 
      
 45 
     | 
    
         
            +
                base = BaseConvert.new(:word, :qgraph)
         
     | 
| 
      
 46 
     | 
    
         
            +
                a = base.convert(a)
         
     | 
| 
      
 47 
     | 
    
         
            +
                assert_equal('z', a)
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                base = BaseConvert.new(:hex, :oct)
         
     | 
| 
      
 50 
     | 
    
         
            +
                assert_equal('7777', base.convert('FFF'))
         
     | 
| 
      
 51 
     | 
    
         
            +
                assert_equal('7777', base.convert('fff')) # Tests the upcase convenience
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                base = BaseConvert.new(:oct, :hex)
         
     | 
| 
      
 54 
     | 
    
         
            +
                assert_equal('FFF', base.convert('7777'))
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'base_convert/config'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'base_convert/functions'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class TestFunctions < Test::Unit::TestCase
         
     | 
| 
      
 6 
     | 
    
         
            +
              include BASE_CONVERT
         
     | 
| 
      
 7 
     | 
    
         
            +
              include CONFIG
         
     | 
| 
      
 8 
     | 
    
         
            +
              extend  FUNCTIONS
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              HEX  = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              def test_001_to_integer
         
     | 
| 
      
 13 
     | 
    
         
            +
                a = TestFunctions.to_integer('0', 16, HEX)
         
     | 
| 
      
 14 
     | 
    
         
            +
                assert_equal(0, a)
         
     | 
| 
      
 15 
     | 
    
         
            +
                a = TestFunctions.to_integer('a', 16, HEX)
         
     | 
| 
      
 16 
     | 
    
         
            +
                assert_equal(10, a)
         
     | 
| 
      
 17 
     | 
    
         
            +
                a = TestFunctions.to_integer('f', 16, HEX)
         
     | 
| 
      
 18 
     | 
    
         
            +
                assert_equal(15, a)
         
     | 
| 
      
 19 
     | 
    
         
            +
                a = TestFunctions.to_integer('abcdef', 16, HEX)
         
     | 
| 
      
 20 
     | 
    
         
            +
                assert_equal(11259375, a)
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              def test_002_to_base
         
     | 
| 
      
 24 
     | 
    
         
            +
                a = TestFunctions.to_base(0, 16, WORD)
         
     | 
| 
      
 25 
     | 
    
         
            +
                assert_equal('0', a)
         
     | 
| 
      
 26 
     | 
    
         
            +
                a = TestFunctions.to_base(10, 16, WORD)
         
     | 
| 
      
 27 
     | 
    
         
            +
                assert_equal('A', a)
         
     | 
| 
      
 28 
     | 
    
         
            +
                a = TestFunctions.to_base(15, 16, WORD)
         
     | 
| 
      
 29 
     | 
    
         
            +
                assert_equal('F', a)
         
     | 
| 
      
 30 
     | 
    
         
            +
                a = TestFunctions.to_base(11259375, 16, WORD)
         
     | 
| 
      
 31 
     | 
    
         
            +
                assert_equal('ABCDEF', a)
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,99 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'base_convert/config'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'base_convert/helpers'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class TestHelpers < Test::Unit::TestCase
         
     | 
| 
      
 6 
     | 
    
         
            +
              include BASE_CONVERT
         
     | 
| 
      
 7 
     | 
    
         
            +
              include CONFIG
         
     | 
| 
      
 8 
     | 
    
         
            +
              extend  HELPERS
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              HEX  = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              def test_003_upcase
         
     | 
| 
      
 13 
     | 
    
         
            +
                assert(TestHelpers.upcase?(36, WORD))
         
     | 
| 
      
 14 
     | 
    
         
            +
                refute(TestHelpers.upcase?(36, HEX))
         
     | 
| 
      
 15 
     | 
    
         
            +
                refute(TestHelpers.upcase?(37, WORD))
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              def test_004_validate
         
     | 
| 
      
 19 
     | 
    
         
            +
                assert_raises(RuntimeError){ TestHelpers.validate(5.0, WORD) }
         
     | 
| 
      
 20 
     | 
    
         
            +
                assert_nothing_raised(Exception){ TestHelpers.validate(5, WORD) }
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                assert_raises(RuntimeError){ TestHelpers.validate(5, '0123456789abdef') }
         
     | 
| 
      
 23 
     | 
    
         
            +
                assert_nothing_raised(Exception){ TestHelpers.validate(5, ['0', '1', '2', '3', '4']) }
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                assert_raises(RuntimeError){ TestHelpers.validate(5, ['0', '1', '2', '3']) }
         
     | 
| 
      
 26 
     | 
    
         
            +
                assert_nothing_raised(Exception){ TestHelpers.validate(5, ['0', '1', '2', '3', '4', '5', '6']) }
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                assert_raises(RuntimeError){ TestHelpers.validate(1, ['0', '1']) }
         
     | 
| 
      
 29 
     | 
    
         
            +
                assert_nothing_raised(Exception){ TestHelpers.validate(2, ['0', '1']) }
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              def test_005_validate_string
         
     | 
| 
      
 33 
     | 
    
         
            +
                assert_raises(RuntimeError){ TestHelpers.validate_string('xyz', 3, ['a','b','c']) }
         
     | 
| 
      
 34 
     | 
    
         
            +
                assert_nothing_raised(Exception){ TestHelpers.validate_string('xyz', 3, ['x','y','z']) }
         
     | 
| 
      
 35 
     | 
    
         
            +
                assert_nothing_raised(Exception){ TestHelpers.validate_string('xyz', 3, ['x','y','z','a','b','c']) }
         
     | 
| 
      
 36 
     | 
    
         
            +
                assert_raises(RuntimeError){ TestHelpers.validate_string('abc', 3, ['x','y','z','a','b','c']) }
         
     | 
| 
      
 37 
     | 
    
         
            +
                assert_nothing_raised(Exception){ TestHelpers.validate_string('abc', 6, ['x','y','z','a','b','c']) }
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              def test_006_digits
         
     | 
| 
      
 41 
     | 
    
         
            +
                wl = WORD.length
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                a = TestHelpers.digits(wl)
         
     | 
| 
      
 44 
     | 
    
         
            +
                assert(a.equal?(WORD))
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                a = TestHelpers.digits(wl+1)
         
     | 
| 
      
 47 
     | 
    
         
            +
                assert(a.equal?(QGRAPH))
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                a = TestHelpers.digits(:word)
         
     | 
| 
      
 50 
     | 
    
         
            +
                assert(a.equal?(WORD))
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                a = TestHelpers.digits(:qgraph)
         
     | 
| 
      
 53 
     | 
    
         
            +
                assert(a.equal?(QGRAPH))
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                a = TestHelpers.digits(:hex)
         
     | 
| 
      
 56 
     | 
    
         
            +
                assert(a.equal?(WORD))
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                DIGITS[:my_digits] = ['X','Y','Z']
         
     | 
| 
      
 59 
     | 
    
         
            +
                a = TestHelpers.digits(:my_digits)
         
     | 
| 
      
 60 
     | 
    
         
            +
                assert(a.equal?(DIGITS[:my_digits]))
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                BASE[:my_base] = wl
         
     | 
| 
      
 63 
     | 
    
         
            +
                a = TestHelpers.digits(:my_base)
         
     | 
| 
      
 64 
     | 
    
         
            +
                assert(a.equal?(WORD))
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                BASE[:my_base] = wl+1
         
     | 
| 
      
 67 
     | 
    
         
            +
                a = TestHelpers.digits(:my_base)
         
     | 
| 
      
 68 
     | 
    
         
            +
                assert(a.equal?(QGRAPH))
         
     | 
| 
      
 69 
     | 
    
         
            +
              end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
              def test_007_base
         
     | 
| 
      
 72 
     | 
    
         
            +
                wl = WORD.length
         
     | 
| 
      
 73 
     | 
    
         
            +
                ql = QGRAPH.length
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                a = TestHelpers.base(:word)
         
     | 
| 
      
 76 
     | 
    
         
            +
                assert_equal(wl, a)
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                a = TestHelpers.base(:qgraph)
         
     | 
| 
      
 79 
     | 
    
         
            +
                assert_equal(ql, a)
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                a = TestHelpers.base(:hex)
         
     | 
| 
      
 82 
     | 
    
         
            +
                assert_equal(16, a)
         
     | 
| 
      
 83 
     | 
    
         
            +
                a = TestHelpers.base(:hexadecimal)
         
     | 
| 
      
 84 
     | 
    
         
            +
                assert_equal(16, a)
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                a = TestHelpers.base(:decimal)
         
     | 
| 
      
 87 
     | 
    
         
            +
                assert_equal(10, a)
         
     | 
| 
      
 88 
     | 
    
         
            +
                a = TestHelpers.base(:dec)
         
     | 
| 
      
 89 
     | 
    
         
            +
                assert_equal(10, a)
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                a = TestHelpers.base(:octal)
         
     | 
| 
      
 92 
     | 
    
         
            +
                assert_equal(8, a)
         
     | 
| 
      
 93 
     | 
    
         
            +
                a = TestHelpers.base(:oct)
         
     | 
| 
      
 94 
     | 
    
         
            +
                assert_equal(8, a)
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                a = TestHelpers.base(:binary)
         
     | 
| 
      
 97 
     | 
    
         
            +
                assert_equal(2, a)
         
     | 
| 
      
 98 
     | 
    
         
            +
              end
         
     | 
| 
      
 99 
     | 
    
         
            +
            end
         
     | 
    
        data/test/test_number.rb
    ADDED
    
    | 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'base_convert'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class TestNumber < Test::Unit::TestCase
         
     | 
| 
      
 5 
     | 
    
         
            +
              include BASE_CONVERT
         
     | 
| 
      
 6 
     | 
    
         
            +
              include CONFIG
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def test_001_new
         
     | 
| 
      
 9 
     | 
    
         
            +
                a = Number.new(100)
         
     | 
| 
      
 10 
     | 
    
         
            +
                assert_equal '100', a
         
     | 
| 
      
 11 
     | 
    
         
            +
                a = Number.new('100')
         
     | 
| 
      
 12 
     | 
    
         
            +
                assert_equal '100', a
         
     | 
| 
      
 13 
     | 
    
         
            +
                assert_equal 100, a.to_integer
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                assert_raises(RuntimeError){ Number.new('FFF') }
         
     | 
| 
      
 16 
     | 
    
         
            +
                a = Number.new('FFF', 16)
         
     | 
| 
      
 17 
     | 
    
         
            +
                assert_equal 'FFF', a
         
     | 
| 
      
 18 
     | 
    
         
            +
                assert_equal '7777', a.to_base(8)
         
     | 
| 
      
 19 
     | 
    
         
            +
                assert_equal 'FFF', a.to_base(8).to_base(16)
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'base_convert'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'digest'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class TestOriginal < Test::Unit::TestCase
         
     | 
| 
      
 6 
     | 
    
         
            +
              include BASE_CONVERT
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def test_001_to_s_n
         
     | 
| 
      
 9 
     | 
    
         
            +
                # test against number.to_s(n)
         
     | 
| 
      
 10 
     | 
    
         
            +
                2.upto(36) do |n|
         
     | 
| 
      
 11 
     | 
    
         
            +
                  # Converts to base n.
         
     | 
| 
      
 12 
     | 
    
         
            +
                  base = BaseConvert.new(n)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  100.times do
         
     | 
| 
      
 14 
     | 
    
         
            +
                    number = rand(10000)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    string = number.to_s(n)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    # BaseConvert uses caps
         
     | 
| 
      
 17 
     | 
    
         
            +
                    assert_equal(string.upcase, base.integer2base(number))
         
     | 
| 
      
 18 
     | 
    
         
            +
                    # and it will automatically upcase
         
     | 
| 
      
 19 
     | 
    
         
            +
                    assert_equal(number, base.base2integer(string))
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              def test_002_hello_world
         
     | 
| 
      
 25 
     | 
    
         
            +
                hexdigest = Digest::SHA256.hexdigest('Hello World!') # and verified below
         
     | 
| 
      
 26 
     | 
    
         
            +
                assert_equal '7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069', hexdigest
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                word = BaseConvert.new(:hex, :word).convert(hexdigest)
         
     | 
| 
      
 29 
     | 
    
         
            +
                assert_equal 'UEjKBW7lvEq1KjyCxAYQRJqmvffQEbwLNvzs8Ggdy4P', word
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                assert_equal hexdigest.upcase, BaseConvert.new(:word, :hex).convert(word)
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                qstring = '$<c6PCX_mugC58xfO5JOp+V4|<jHekI^_WE$?d?9'
         
     | 
| 
      
 34 
     | 
    
         
            +
                assert_equal qstring, BaseConvert.new(:hex, :qgraph).convert(hexdigest)
         
     | 
| 
      
 35 
     | 
    
         
            +
                assert_equal hexdigest.upcase, BaseConvert.new(:qgraph, :hex).convert(qstring)
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              def test_003_hundred_million
         
     | 
| 
      
 39 
     | 
    
         
            +
                assert_equal '6laZE', BaseConvert.new(10, 62).convert( 100_000_000 )
         
     | 
| 
      
 40 
     | 
    
         
            +
                assert_equal ')8]3H', BaseConvert.new(63).integer2base( 100_000_000 )
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                base = BaseConvert.new(62)
         
     | 
| 
      
 43 
     | 
    
         
            +
                base.to_digits = BaseConvert::QGRAPH
         
     | 
| 
      
 44 
     | 
    
         
            +
                assert_equal ')RGF1', base.integer2base( 100_000_000 )
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,66 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'base_convert'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'digest'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            # Using my original tests on BASE_CONVERT::Number
         
     | 
| 
      
 6 
     | 
    
         
            +
            class TestOriginal2 < Test::Unit::TestCase
         
     | 
| 
      
 7 
     | 
    
         
            +
              include BASE_CONVERT
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              def test_001_to_s_n
         
     | 
| 
      
 10 
     | 
    
         
            +
                # test against number.to_s(base)
         
     | 
| 
      
 11 
     | 
    
         
            +
                2.upto(36) do |base|
         
     | 
| 
      
 12 
     | 
    
         
            +
                  100.times do
         
     | 
| 
      
 13 
     | 
    
         
            +
                    decimal  = rand(10000)
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    decimal0 = decimal.to_s
         
     | 
| 
      
 16 
     | 
    
         
            +
                    decimal1 = Number.new(decimal)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    assert_equal(decimal0, decimal1)
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    base0 = decimal.to_s(base)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    base1 = decimal1.to_base(base)
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                    # BaseConvert uses caps
         
     | 
| 
      
 23 
     | 
    
         
            +
                    assert_equal(base0.upcase, base1)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    assert_equal(decimal1, base1.to_base(10))
         
     | 
| 
      
 25 
     | 
    
         
            +
                    # and it will automatically upcase
         
     | 
| 
      
 26 
     | 
    
         
            +
                    assert_equal(decimal1, Number.new(base0, base).to_base(10))
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              def test_002_hello_world
         
     | 
| 
      
 32 
     | 
    
         
            +
                hexdigest = Number.new(Digest::SHA256.hexdigest('Hello World!'), :hex)
         
     | 
| 
      
 33 
     | 
    
         
            +
                # and verified below (BaseConvert uses uppecase for hexadeximals.
         
     | 
| 
      
 34 
     | 
    
         
            +
                assert_equal '7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069'.upcase, hexdigest
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                #word = BaseConvert.new(:hex, :word).convert(hexdigest)
         
     | 
| 
      
 37 
     | 
    
         
            +
                word = hexdigest.to_base(:word)
         
     | 
| 
      
 38 
     | 
    
         
            +
                assert_equal 'UEjKBW7lvEq1KjyCxAYQRJqmvffQEbwLNvzs8Ggdy4P', word
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                #assert_equal hexdigest.upcase, BaseConvert.new(:word, :hex).convert(word)
         
     | 
| 
      
 41 
     | 
    
         
            +
                assert_equal hexdigest, word.to_base(:hex)
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                qstring = Number.new('$<c6PCX_mugC58xfO5JOp+V4|<jHekI^_WE$?d?9', :qgraph)
         
     | 
| 
      
 44 
     | 
    
         
            +
                # and verified below
         
     | 
| 
      
 45 
     | 
    
         
            +
                assert_equal '$<c6PCX_mugC58xfO5JOp+V4|<jHekI^_WE$?d?9', qstring
         
     | 
| 
      
 46 
     | 
    
         
            +
                #assert_equal qstring, BaseConvert.new(:hex, :qgraph).convert(hexdigest)
         
     | 
| 
      
 47 
     | 
    
         
            +
                assert_equal qstring, hexdigest.to_base(:qgraph)
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                assert_equal hexdigest, qstring.to_base(:hex)
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
              def test_003_hundred_million
         
     | 
| 
      
 53 
     | 
    
         
            +
                hudred_million = Number.new(100_000_000)
         
     | 
| 
      
 54 
     | 
    
         
            +
                assert_equal '100000000', hudred_million
         
     | 
| 
      
 55 
     | 
    
         
            +
                #assert_equal '6laZE', BaseConvert.new(10, 62).convert( 100_000_000 )
         
     | 
| 
      
 56 
     | 
    
         
            +
                assert_equal '6laZE', hudred_million.to_base(62)
         
     | 
| 
      
 57 
     | 
    
         
            +
                #assert_equal ')8]3H', BaseConvert.new(63).integer2base( 100_000_000 )
         
     | 
| 
      
 58 
     | 
    
         
            +
                assert_equal ')8]3H', hudred_million.to_base(63)
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                #base = BaseConvert.new(62)
         
     | 
| 
      
 61 
     | 
    
         
            +
                #base.to_digits = BaseConvert::QGRAPH
         
     | 
| 
      
 62 
     | 
    
         
            +
                #assert_equal ')RGF1', base.integer2base( 100_000_000 )
         
     | 
| 
      
 63 
     | 
    
         
            +
                assert_equal ')RGF1', hudred_million.to_base(62, BaseConvert::QGRAPH)
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,48 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'base_convert'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class TestTrivial < Test::Unit::TestCase
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              def test_001_version
         
     | 
| 
      
 7 
     | 
    
         
            +
                assert_not_nil BASE_CONVERT::VERSION=~/^\d+\.\d+\.\d+$/
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def test_002_qgraph
         
     | 
| 
      
 11 
     | 
    
         
            +
                a = BASE_CONVERT::CONFIG::QGRAPH
         
     | 
| 
      
 12 
     | 
    
         
            +
                assert_equal(91, a.length)
         
     | 
| 
      
 13 
     | 
    
         
            +
                refute(a.include?('"'))
         
     | 
| 
      
 14 
     | 
    
         
            +
                refute(a.include?("'"))
         
     | 
| 
      
 15 
     | 
    
         
            +
                assert_equal('!', a.first)
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              def test_003_word
         
     | 
| 
      
 19 
     | 
    
         
            +
                a = BASE_CONVERT::CONFIG::WORD
         
     | 
| 
      
 20 
     | 
    
         
            +
                assert_equal(62, a.length)
         
     | 
| 
      
 21 
     | 
    
         
            +
                refute(a.include?('_'))
         
     | 
| 
      
 22 
     | 
    
         
            +
                assert_equal('0', a.first)
         
     | 
| 
      
 23 
     | 
    
         
            +
                assert_equal(36, BASE_CONVERT::CONFIG::INDEXa)
         
     | 
| 
      
 24 
     | 
    
         
            +
                assert_equal('a', a[36])
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              def test_004_base
         
     | 
| 
      
 28 
     | 
    
         
            +
                a = BASE_CONVERT::CONFIG::BASE
         
     | 
| 
      
 29 
     | 
    
         
            +
                assert_equal(Hash, a.class)
         
     | 
| 
      
 30 
     | 
    
         
            +
                assert_equal(62, a[:word])
         
     | 
| 
      
 31 
     | 
    
         
            +
                assert_equal(91, a[:qgraph])
         
     | 
| 
      
 32 
     | 
    
         
            +
                assert_equal(16, a[:hex])
         
     | 
| 
      
 33 
     | 
    
         
            +
                assert_equal(16, a[:hexadecimal])
         
     | 
| 
      
 34 
     | 
    
         
            +
                assert_equal(10, a[:decimal])
         
     | 
| 
      
 35 
     | 
    
         
            +
                assert_equal(10, a[:dec])
         
     | 
| 
      
 36 
     | 
    
         
            +
                assert_equal(8,  a[:octal])
         
     | 
| 
      
 37 
     | 
    
         
            +
                assert_equal(8,  a[:oct])
         
     | 
| 
      
 38 
     | 
    
         
            +
                assert_equal(2,  a[:binary])
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              def test_005_digits
         
     | 
| 
      
 42 
     | 
    
         
            +
                a = BASE_CONVERT::CONFIG::DIGITS
         
     | 
| 
      
 43 
     | 
    
         
            +
                assert_equal(Hash, a.class)
         
     | 
| 
      
 44 
     | 
    
         
            +
                assert(a[:word].equal?(BASE_CONVERT::CONFIG::WORD))
         
     | 
| 
      
 45 
     | 
    
         
            +
                assert(a[:qgraph].equal?(BASE_CONVERT::CONFIG::QGRAPH))
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,29 +1,74 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: base_convert
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.0.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
     | 
    
         
            -
            -  
     | 
| 
      
 7 
     | 
    
         
            +
            - CarlosJHR64
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2014-02- 
     | 
| 
       12 
     | 
    
         
            -
            dependencies: 
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
               
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2014-02-13 00:00:00.000000000 Z
         
     | 
| 
      
 12 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 13 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 14 
     | 
    
         
            +
              name: test-unit
         
     | 
| 
      
 15 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 16 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 17 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 18 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '2.5'
         
     | 
| 
      
 20 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 21 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 22 
     | 
    
         
            +
                    version: 2.5.5
         
     | 
| 
      
 23 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 24 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 25 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 26 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 27 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 28 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 29 
     | 
    
         
            +
                    version: '2.5'
         
     | 
| 
      
 30 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 31 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 32 
     | 
    
         
            +
                    version: 2.5.5
         
     | 
| 
      
 33 
     | 
    
         
            +
            description: |
         
     | 
| 
      
 34 
     | 
    
         
            +
              base_convert - Number base conversion.
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              Converts positive integers to different bases:
         
     | 
| 
      
 37 
     | 
    
         
            +
              Binary, octal, hexadecimal, decimal, or any arbitrary base.
         
     | 
| 
      
 38 
     | 
    
         
            +
              "Out of the box" handling of up to base 91.
         
     | 
| 
      
 39 
     | 
    
         
            +
              Allows for arbitrary choice of alphabet(digits).
         
     | 
| 
       15 
40 
     | 
    
         
             
            email: carlosjhr64@gmail.com
         
     | 
| 
       16 
41 
     | 
    
         
             
            executables: []
         
     | 
| 
       17 
42 
     | 
    
         
             
            extensions: []
         
     | 
| 
       18 
     | 
    
         
            -
            extra_rdoc_files: 
     | 
| 
      
 43 
     | 
    
         
            +
            extra_rdoc_files:
         
     | 
| 
      
 44 
     | 
    
         
            +
            - README.rdoc
         
     | 
| 
       19 
45 
     | 
    
         
             
            files:
         
     | 
| 
       20 
     | 
    
         
            -
            -  
     | 
| 
       21 
     | 
    
         
            -
            -  
     | 
| 
      
 46 
     | 
    
         
            +
            - History.txt
         
     | 
| 
      
 47 
     | 
    
         
            +
            - README.rdoc
         
     | 
| 
      
 48 
     | 
    
         
            +
            - TODO.txt
         
     | 
| 
      
 49 
     | 
    
         
            +
            - base_convert.gemspec
         
     | 
| 
      
 50 
     | 
    
         
            +
            - lib/base_convert.rb
         
     | 
| 
      
 51 
     | 
    
         
            +
            - lib/base_convert/base_convert.rb
         
     | 
| 
      
 52 
     | 
    
         
            +
            - lib/base_convert/config.rb
         
     | 
| 
      
 53 
     | 
    
         
            +
            - lib/base_convert/functions.rb
         
     | 
| 
      
 54 
     | 
    
         
            +
            - lib/base_convert/helpers.rb
         
     | 
| 
      
 55 
     | 
    
         
            +
            - lib/base_convert/number.rb
         
     | 
| 
      
 56 
     | 
    
         
            +
            - lib/base_convert/version.rb
         
     | 
| 
      
 57 
     | 
    
         
            +
            - test/test_base_convert.rb
         
     | 
| 
      
 58 
     | 
    
         
            +
            - test/test_functions.rb
         
     | 
| 
      
 59 
     | 
    
         
            +
            - test/test_helpers.rb
         
     | 
| 
      
 60 
     | 
    
         
            +
            - test/test_number.rb
         
     | 
| 
      
 61 
     | 
    
         
            +
            - test/test_original.rb
         
     | 
| 
      
 62 
     | 
    
         
            +
            - test/test_original2.rb
         
     | 
| 
      
 63 
     | 
    
         
            +
            - test/test_trivial.rb
         
     | 
| 
       22 
64 
     | 
    
         
             
            homepage: https://github.com/carlosjhr64/base_convert
         
     | 
| 
       23 
     | 
    
         
            -
            licenses: 
     | 
| 
      
 65 
     | 
    
         
            +
            licenses:
         
     | 
| 
      
 66 
     | 
    
         
            +
            - MIT
         
     | 
| 
       24 
67 
     | 
    
         
             
            metadata: {}
         
     | 
| 
       25 
68 
     | 
    
         
             
            post_install_message: 
         
     | 
| 
       26 
     | 
    
         
            -
            rdoc_options: 
     | 
| 
      
 69 
     | 
    
         
            +
            rdoc_options:
         
     | 
| 
      
 70 
     | 
    
         
            +
            - "--main"
         
     | 
| 
      
 71 
     | 
    
         
            +
            - README.rdoc
         
     | 
| 
       27 
72 
     | 
    
         
             
            require_paths:
         
     | 
| 
       28 
73 
     | 
    
         
             
            - lib
         
     | 
| 
       29 
74 
     | 
    
         
             
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -36,10 +81,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       36 
81 
     | 
    
         
             
              - - ">="
         
     | 
| 
       37 
82 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       38 
83 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       39 
     | 
    
         
            -
            requirements: 
     | 
| 
      
 84 
     | 
    
         
            +
            requirements:
         
     | 
| 
      
 85 
     | 
    
         
            +
            - 'ruby: ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]'
         
     | 
| 
       40 
86 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       41 
87 
     | 
    
         
             
            rubygems_version: 2.2.0
         
     | 
| 
       42 
88 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       43 
89 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       44 
     | 
    
         
            -
            summary:  
     | 
| 
      
 90 
     | 
    
         
            +
            summary: base_convert - Number base conversion.
         
     | 
| 
       45 
91 
     | 
    
         
             
            test_files: []
         
     | 
    
        data/README.txt
    DELETED
    
    | 
         @@ -1,84 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # BaseConvert
         
     | 
| 
       2 
     | 
    
         
            -
            # DESCRIPTION:
         
     | 
| 
       3 
     | 
    
         
            -
            # Got the code originally from
         
     | 
| 
       4 
     | 
    
         
            -
            #	http://rosettacode.org/wiki/Non-decimal_radices/Convert#Ruby
         
     | 
| 
       5 
     | 
    
         
            -
            # which I then converted to a class.
         
     | 
| 
       6 
     | 
    
         
            -
            # SINOPSIS:
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
            def ok(a,b)
         
     | 
| 
       9 
     | 
    
         
            -
              raise "bad! /#{a}/ == /#{b}/" unless a == b
         
     | 
| 
       10 
     | 
    
         
            -
            end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
            # ruby -I ./lib README.txt
         
     | 
| 
       13 
     | 
    
         
            -
            if RUBY_VERSION =~ /^1.9.2/ then
         
     | 
| 
       14 
     | 
    
         
            -
              require 'base_convert'
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
              # Verify it works up to base 36 with number.to_s(n)
         
     | 
| 
       17 
     | 
    
         
            -
              2.upto(36) do |n|
         
     | 
| 
       18 
     | 
    
         
            -
                base = BaseConvert.new(n)
         
     | 
| 
       19 
     | 
    
         
            -
                100.times do
         
     | 
| 
       20 
     | 
    
         
            -
                  number = rand(10000)
         
     | 
| 
       21 
     | 
    
         
            -
                  string = number.to_s(n)
         
     | 
| 
       22 
     | 
    
         
            -
                  ok( base.convert(string), number  )
         
     | 
| 
       23 
     | 
    
         
            -
                  ok( base.convert(number), string.upcase  ) # BaseConvert uses caps
         
     | 
| 
       24 
     | 
    
         
            -
                end
         
     | 
| 
       25 
     | 
    
         
            -
              end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
              # BaseConvert is case insensitive up to base 36, but
         
     | 
| 
       28 
     | 
    
         
            -
              # returns string values with capital leters.  
         
     | 
| 
       29 
     | 
    
         
            -
              # At base 37 and up, it's case sensitive with lower case letter being of higher order.
         
     | 
| 
       30 
     | 
    
         
            -
              # It primary use is to reduce digest strings.
         
     | 
| 
       31 
     | 
    
         
            -
              # For example:
         
     | 
| 
       32 
     | 
    
         
            -
              require 'digest'
         
     | 
| 
       33 
     | 
    
         
            -
              # This hexadecimal:
         
     | 
| 
       34 
     | 
    
         
            -
              ok(	"7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069",
         
     | 
| 
       35 
     | 
    
         
            -
            	hexdigest = Digest::SHA256.hexdigest('Hello World!') )
         
     | 
| 
       36 
     | 
    
         
            -
              # Translatates to this word(\w except '_') string
         
     | 
| 
       37 
     | 
    
         
            -
              ok(	string = 'UEjKBW7lvEq1KjyCxAYQRJqmvffQEbwLNvzs8Ggdy4P',
         
     | 
| 
       38 
     | 
    
         
            -
            	BaseConvert.new(:hexadecimal,:word).convert(hexdigest) )
         
     | 
| 
       39 
     | 
    
         
            -
              # and we can covert it back:
         
     | 
| 
       40 
     | 
    
         
            -
              ok(	BaseConvert.new(:word,:hexadecimal).convert(string),
         
     | 
| 
       41 
     | 
    
         
            -
            	hexdigest.upcase )
         
     | 
| 
       42 
     | 
    
         
            -
              # Again, note the BaseConvert returns the hexdigest string capitalized.
         
     | 
| 
       43 
     | 
    
         
            -
              #There is also a quotable string([[:graph:]] except [`'"]):
         
     | 
| 
       44 
     | 
    
         
            -
              ok(	qstring = '$<c6PCX_mugC58xfO5JOp+V4|<jHekI^_WE$?d?9',
         
     | 
| 
       45 
     | 
    
         
            -
            	BaseConvert.new(:hexadecimal,:qgraph).convert(hexdigest))
         
     | 
| 
       46 
     | 
    
         
            -
              # And you can convert it back
         
     | 
| 
       47 
     | 
    
         
            -
              ok(	BaseConvert.new(:qgraph,:hexadecimal).convert(qstring),
         
     | 
| 
       48 
     | 
    
         
            -
            	hexdigest.upcase)
         
     | 
| 
       49 
     | 
    
         
            -
              # Note the length
         
     | 
| 
       50 
     | 
    
         
            -
              ok(	64, hexdigest.length)
         
     | 
| 
       51 
     | 
    
         
            -
              ok(	43, string.length)
         
     | 
| 
       52 
     | 
    
         
            -
              ok(	40, qstring.length)
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
              # BaseConvert has the following primary form:
         
     | 
| 
       55 
     | 
    
         
            -
              #	# converting from basefrom to baseto
         
     | 
| 
       56 
     | 
    
         
            -
              #	base = BaseConvert.new( basefrom, baseto )
         
     | 
| 
       57 
     | 
    
         
            -
              #	# covert basefrom_string in basefrom to baseto_string in baseto
         
     | 
| 
       58 
     | 
    
         
            -
              #	baseto_string = base.convert( basefrom_string )
         
     | 
| 
       59 
     | 
    
         
            -
              #	# convert basefrom_string to it's decimal number representation
         
     | 
| 
       60 
     | 
    
         
            -
              #	decimal_number = base.base2dec( basefrom_string )
         
     | 
| 
       61 
     | 
    
         
            -
              #	# convert a decimal_number to it's baseto string representation
         
     | 
| 
       62 
     | 
    
         
            -
              #	baseto_string = base.dec2base( decimal_number )
         
     | 
| 
       63 
     | 
    
         
            -
              # BaseConvert has the following heuristic forms:
         
     | 
| 
       64 
     | 
    
         
            -
              #	# converting to and from _base_
         
     | 
| 
       65 
     | 
    
         
            -
              #	base = BaseConvert.new( _base_ )
         
     | 
| 
       66 
     | 
    
         
            -
              #	base_string = base.convert( decimal_number )
         
     | 
| 
       67 
     | 
    
         
            -
              #	decimal_number = base.convert( base_string )
         
     | 
| 
       68 
     | 
    
         
            -
              # BaseConvert has the following mneumonic keys that can be use for base:
         
     | 
| 
       69 
     | 
    
         
            -
              #	:binary	=> 2
         
     | 
| 
       70 
     | 
    
         
            -
              #	:oct,:octal => 8,
         
     | 
| 
       71 
     | 
    
         
            -
              #	:dec,:decimal => 10,
         
     | 
| 
       72 
     | 
    
         
            -
              #	:hex,:hexadecimal => 16
         
     | 
| 
       73 
     | 
    
         
            -
              # BaseConvert's base can go up to 62 with :word(\w except '_') and 91 with :qgraph([:graph] except [`'"].
         
     | 
| 
       74 
     | 
    
         
            -
              # By default, :word is used...
         
     | 
| 
       75 
     | 
    
         
            -
              ok(	'6laZE', BaseConvert.new(62).convert( 100_000_000 ))
         
     | 
| 
       76 
     | 
    
         
            -
              # ...until a transition to :qgraph is required.
         
     | 
| 
       77 
     | 
    
         
            -
              ok(	')8]3H', BaseConvert.new(63).convert( 100_000_000 ))
         
     | 
| 
       78 
     | 
    
         
            -
              # But you can specify the digit dictionary. At this point you've read and know the code...
         
     | 
| 
       79 
     | 
    
         
            -
              base = BaseConvert.new(62)
         
     | 
| 
       80 
     | 
    
         
            -
              base.to_digits = BaseConvert::QGRAPH
         
     | 
| 
       81 
     | 
    
         
            -
              ok(	')RGF1', base.convert( 100_000_000 ))
         
     | 
| 
       82 
     | 
    
         
            -
            end
         
     | 
| 
       83 
     | 
    
         
            -
            # The End.
         
     | 
| 
       84 
     | 
    
         
            -
            # <i>carlosjhr64</i>@<i>gmail<i/>.<i>com</i>
         
     |