constants 0.1.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.
- data/MIT-LICENSE +21 -0
- data/README +125 -0
- data/Rakefile +171 -0
- data/lib/constants.rb +5 -0
- data/lib/constants/constant.rb +94 -0
- data/lib/constants/constant_library.rb +299 -0
- data/lib/constants/libraries/element.rb +214 -0
- data/lib/constants/libraries/particle.rb +83 -0
- data/lib/constants/libraries/physical.rb +297 -0
- data/lib/constants/library.rb +133 -0
- data/lib/constants/stash.rb +94 -0
- data/lib/constants/uncertainty.rb +8 -0
- data/test/constants/constant_library_test.rb +304 -0
- data/test/constants/constant_test.rb +77 -0
- data/test/constants/libraries/element_test.rb +207 -0
- data/test/constants/libraries/particle_test.rb +43 -0
- data/test/constants/libraries/physical_test.rb +32 -0
- data/test/constants/library_test.rb +125 -0
- data/test/constants/stash_test.rb +99 -0
- data/test/constants_test_helper.rb +51 -0
- data/test/constants_test_suite.rb +3 -0
- data/test/readme_doc_test.rb +58 -0
- metadata +84 -0
| @@ -0,0 +1,77 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), '../constants_test_helper.rb') 
         | 
| 2 | 
            +
            require 'constants/constant'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class ConstantTest < Test::Unit::TestCase
         | 
| 5 | 
            +
              include Constants
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              #
         | 
| 8 | 
            +
              # parse test
         | 
| 9 | 
            +
              #
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
              def test_parse_documentation
         | 
| 12 | 
            +
                assert_equal [1.0, 0.2], Constant.parse("1.0(2)").to_a
         | 
| 13 | 
            +
                assert_equal [1.0078250321, 1/2500000000], Constant.parse("1.007 825 032 1(4)").to_a
         | 
| 14 | 
            +
                assert_equal [6.62606896, nil], Constant.parse("6.626 068 96").to_a
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
              
         | 
| 17 | 
            +
              def test_parse
         | 
| 18 | 
            +
                assert_equal [1.0, nil], Constant.parse("1.0").to_a
         | 
| 19 | 
            +
                assert_equal [1.0, 0], Constant.parse("1.0(0)").to_a
         | 
| 20 | 
            +
                assert_equal [1.0, 0.1], Constant.parse("1.0(1)").to_a
         | 
| 21 | 
            +
                assert_equal [100, 1], Constant.parse("100(1)").to_a
         | 
| 22 | 
            +
                assert_equal [100, 11], Constant.parse("100(11)").to_a
         | 
| 23 | 
            +
                assert_equal [1234.54789, 0.00011], Constant.parse("1234.54789(11)").to_a
         | 
| 24 | 
            +
                assert_equal [1234.54789, 0.00011], Constant.parse("1234.547 89 (11)").to_a
         | 
| 25 | 
            +
                assert_equal [1000, 100], Constant.parse("1.0(1)e3").to_a
         | 
| 26 | 
            +
                assert_equal [0.001, 0.0001], Constant.parse("1.0(1)e-3").to_a
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
              
         | 
| 29 | 
            +
              #
         | 
| 30 | 
            +
              # == test
         | 
| 31 | 
            +
              #
         | 
| 32 | 
            +
              
         | 
| 33 | 
            +
              def test_equal_compares_Numerics_with_value
         | 
| 34 | 
            +
                c = Constant.new(1.23)
         | 
| 35 | 
            +
                assert c == 1.23
         | 
| 36 | 
            +
                assert c != 1.24
         | 
| 37 | 
            +
                
         | 
| 38 | 
            +
                assert_equal 1.23, c
         | 
| 39 | 
            +
                assert_not_equal 1.24, c
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
              
         | 
| 42 | 
            +
              def test_equal_compares_non_Numerics_directly
         | 
| 43 | 
            +
                c1 = Constant.new(1.23)
         | 
| 44 | 
            +
                c2 = Constant.new(1.23)
         | 
| 45 | 
            +
                c3 = Constant.new(1.24)
         | 
| 46 | 
            +
                
         | 
| 47 | 
            +
                assert c1 == c2
         | 
| 48 | 
            +
                assert c1 != c3
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
              
         | 
| 51 | 
            +
              #
         | 
| 52 | 
            +
              # <=> test
         | 
| 53 | 
            +
              #
         | 
| 54 | 
            +
              
         | 
| 55 | 
            +
              def test_compare_compares_on_value
         | 
| 56 | 
            +
                c1 = Constant.new(1.23)
         | 
| 57 | 
            +
                c2 = Constant.new(1.23)
         | 
| 58 | 
            +
                c3 = Constant.new(1.24)
         | 
| 59 | 
            +
                
         | 
| 60 | 
            +
                assert_equal 0, c1 <=> c2
         | 
| 61 | 
            +
                assert_equal -1, c1 <=> c3
         | 
| 62 | 
            +
                assert_equal 1, c3 <=> c1
         | 
| 63 | 
            +
              end
         | 
| 64 | 
            +
              
         | 
| 65 | 
            +
              #
         | 
| 66 | 
            +
              # to_a test
         | 
| 67 | 
            +
              #
         | 
| 68 | 
            +
              
         | 
| 69 | 
            +
              def test_to_a_returns_value_uncertainty_array
         | 
| 70 | 
            +
                c = Constant.new(1.23)
         | 
| 71 | 
            +
                assert_equal [1.23, nil], c.to_a
         | 
| 72 | 
            +
                
         | 
| 73 | 
            +
                c = Constant.new(1.23, nil, 0.03)
         | 
| 74 | 
            +
                assert_equal [1.23, 0.03], c.to_a
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
             
         | 
| 77 | 
            +
            end
         | 
| @@ -0,0 +1,207 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), '../../constants_test_helper.rb') 
         | 
| 2 | 
            +
            require 'constants/libraries/element'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class ElementTest < Test::Unit::TestCase
         | 
| 5 | 
            +
              include Constants::Libraries
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              #
         | 
| 8 | 
            +
              # documentation test
         | 
| 9 | 
            +
              #
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
              def test_documentation
         | 
| 12 | 
            +
                e = Element::He
         | 
| 13 | 
            +
                assert_equal "Helium", e.name
         | 
| 14 | 
            +
                assert_equal "He", e.symbol
         | 
| 15 | 
            +
                assert_equal 2, e.atomic_number
         | 
| 16 | 
            +
                assert_equal 4.0026032497, e.mass
         | 
| 17 | 
            +
                assert_equal [3, 4], e.isotopes
         | 
| 18 | 
            +
                assert_equal [0.000137, 99.999863], e.abundances
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
              
         | 
| 21 | 
            +
              #
         | 
| 22 | 
            +
              # initialize test
         | 
| 23 | 
            +
              #
         | 
| 24 | 
            +
              
         | 
| 25 | 
            +
              def test_initialize
         | 
| 26 | 
            +
                c = Element::C
         | 
| 27 | 
            +
                
         | 
| 28 | 
            +
                assert_equal "C", c.symbol
         | 
| 29 | 
            +
                assert_equal "Carbon", c.name
         | 
| 30 | 
            +
                assert_equal 6, c.atomic_number
         | 
| 31 | 
            +
                assert_equal [12, 13], c.isotopes
         | 
| 32 | 
            +
                assert_equal [[12.0, 0], [13.0033548378, 0.000000001]], c.masses.collect {|m| m.to_a}
         | 
| 33 | 
            +
                assert_equal [[98.93, 0.08], [1.07, 0.08]], c.abundances.collect {|m| m.to_a}
         | 
| 34 | 
            +
                assert_equal 0, c.index_max_abundance
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
              
         | 
| 37 | 
            +
              #
         | 
| 38 | 
            +
              # lookup test
         | 
| 39 | 
            +
              #
         | 
| 40 | 
            +
              
         | 
| 41 | 
            +
              def test_lookup
         | 
| 42 | 
            +
                c = Element::C
         | 
| 43 | 
            +
                assert_equal c, Element['C']
         | 
| 44 | 
            +
                assert_equal c, Element['Carbon']
         | 
| 45 | 
            +
                assert_equal c, Element[6]
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
              
         | 
| 48 | 
            +
              def test_lookup_is_nil_for_undefined_elements
         | 
| 49 | 
            +
                assert_nil Element['Q']
         | 
| 50 | 
            +
                assert_nil Element["Madeupium"]
         | 
| 51 | 
            +
                assert_nil Element[102]
         | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
              
         | 
| 54 | 
            +
              #
         | 
| 55 | 
            +
              # methods test
         | 
| 56 | 
            +
              #
         | 
| 57 | 
            +
              
         | 
| 58 | 
            +
              def test_has_isotope?
         | 
| 59 | 
            +
                assert Element::C.has_isotope?(12)
         | 
| 60 | 
            +
                assert Element::C.has_isotope?(13)
         | 
| 61 | 
            +
                assert !Element::C.has_isotope?(8)
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              def test_index_isotope
         | 
| 65 | 
            +
                assert_equal 0, Element::C.index_isotope(12)
         | 
| 66 | 
            +
                assert_equal 1, Element::C.index_isotope(13)
         | 
| 67 | 
            +
                assert_equal nil, Element::C.index_isotope(8)
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
              
         | 
| 70 | 
            +
              def test_mass
         | 
| 71 | 
            +
                assert_equal 12, Element::C.mass
         | 
| 72 | 
            +
                assert_equal 12, Element::C.mass(12)
         | 
| 73 | 
            +
                assert_equal 13.0033548378, Element::C.mass(13)
         | 
| 74 | 
            +
                assert_equal nil, Element::C.mass(8)
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
              
         | 
| 77 | 
            +
              def test_abundance
         | 
| 78 | 
            +
                assert_equal 98.93, Element::C.abundance
         | 
| 79 | 
            +
                assert_equal 98.93, Element::C.abundance(12)
         | 
| 80 | 
            +
                assert_equal 1.07, Element::C.abundance(13)
         | 
| 81 | 
            +
                assert_equal nil, Element::C.abundance(8)
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
              
         | 
| 84 | 
            +
              # vs the Proteome Commons Atom Reference, 2008-01-11
         | 
| 85 | 
            +
              # http://www.proteomecommons.org/archive/1129086318745/docs/atom-reference.html
         | 
| 86 | 
            +
              #
         | 
| 87 | 
            +
              # The website states 'These values are taken from the NIST's list, http://physics.nist.gov'
         | 
| 88 | 
            +
              def test_mass_values_vs_proteome_commons
         | 
| 89 | 
            +
                str = %Q{
         | 
| 90 | 
            +
            H 1.0078250321  0.999885
         | 
| 91 | 
            +
            H2  2.014101778 1.15E-4
         | 
| 92 | 
            +
            O 15.9949146221 0.9975700000000001
         | 
| 93 | 
            +
            O17 16.9991315  3.7999999999999997E-4
         | 
| 94 | 
            +
            O18 17.9991604  0.0020499999999999997
         | 
| 95 | 
            +
            N14 14.0030740052 0.9963200000000001
         | 
| 96 | 
            +
            N15 15.0001088984 0.00368
         | 
| 97 | 
            +
            C12 12.0  0.9893000000000001
         | 
| 98 | 
            +
            C13 13.0033548378 0.010700000000000001
         | 
| 99 | 
            +
            P31 30.97376151 1.0
         | 
| 100 | 
            +
            S32 31.97207069 0.9493
         | 
| 101 | 
            +
            S33 32.9714585  0.0076
         | 
| 102 | 
            +
            S34 33.96786683 0.0429
         | 
| 103 | 
            +
            S36 35.96708088 2.0E-4}
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                atoms = str.split(/\n/)
         | 
| 106 | 
            +
                atoms.each do |atom_str|
         | 
| 107 | 
            +
                  next if atom_str.empty?
         | 
| 108 | 
            +
                  
         | 
| 109 | 
            +
                  name, mass, abundance = atom_str.split(/\s+/)
         | 
| 110 | 
            +
                  name =~ /(\w)(\d*)/
         | 
| 111 | 
            +
                  symbol = $1
         | 
| 112 | 
            +
                  isotope = $2.empty? ? nil : $2.to_i
         | 
| 113 | 
            +
                  mass = mass.to_f
         | 
| 114 | 
            +
                  abundance = abundance.to_f * 100
         | 
| 115 | 
            +
                  
         | 
| 116 | 
            +
                  element = Element[symbol]
         | 
| 117 | 
            +
                  assert_not_nil element, atom_str
         | 
| 118 | 
            +
                  assert element.has_isotope?(isotope), atom_str unless isotope == nil
         | 
| 119 | 
            +
                  
         | 
| 120 | 
            +
                  assert_in_delta mass, element.mass(isotope), delta_mass, atom_str 
         | 
| 121 | 
            +
                  assert_in_delta abundance, element.abundance(isotope), delta_abundance, atom_str 
         | 
| 122 | 
            +
                end
         | 
| 123 | 
            +
              end
         | 
| 124 | 
            +
              
         | 
| 125 | 
            +
              # vs the Unimod Symbols and Mass Values, 2008-01-11
         | 
| 126 | 
            +
              # http://www.unimod.org/masses.html
         | 
| 127 | 
            +
              #
         | 
| 128 | 
            +
              # The website states 'All mass values in Unimod are calculated 
         | 
| 129 | 
            +
              # from the IUPAC atomic weights and isotopic abundances 
         | 
| 130 | 
            +
              # tabulated by WebElements'
         | 
| 131 | 
            +
              #
         | 
| 132 | 
            +
              def test_mass_values_vs_unimod
         | 
| 133 | 
            +
                str = %Q{
         | 
| 134 | 
            +
            H Hydrogen  1.007825035 1.00794
         | 
| 135 | 
            +
            2H  Deuterium 2.014101779 2.014101779
         | 
| 136 | 
            +
            Li  Lithium 7.016003  6.941
         | 
| 137 | 
            +
            C Carbon  12  12.0107
         | 
| 138 | 
            +
            13C Carbon13  13.00335483 13.00335483
         | 
| 139 | 
            +
            N Nitrogen  14.003074 14.0067
         | 
| 140 | 
            +
            15N Nitrogen15  15.00010897 15.00010897
         | 
| 141 | 
            +
            O Oxygen  15.99491463 15.9994
         | 
| 142 | 
            +
            18O Oxygen18  17.9991603  17.9991603
         | 
| 143 | 
            +
            F Fluorine  18.99840322 18.9984032
         | 
| 144 | 
            +
            Na  Sodium  22.9897677  22.98977
         | 
| 145 | 
            +
            P Phosphorous 30.973762 30.973761
         | 
| 146 | 
            +
            S Sulfur  31.9720707  32.065
         | 
| 147 | 
            +
            Cl  Chlorine  34.96885272 35.453
         | 
| 148 | 
            +
            K Potassium 38.9637074  39.0983
         | 
| 149 | 
            +
            Ca  Calcium 39.9625906  40.078
         | 
| 150 | 
            +
            Fe  Iron  55.9349393  55.845
         | 
| 151 | 
            +
            Ni  Nickel  57.9353462  58.6934
         | 
| 152 | 
            +
            Cu  Copper  62.9295989  63.546
         | 
| 153 | 
            +
            Zn  Zinc  63.9291448  65.409
         | 
| 154 | 
            +
            Br  Bromine 78.9183361  79.904
         | 
| 155 | 
            +
            Se  Selenium  79.9165196  78.96
         | 
| 156 | 
            +
            Mo  Molybdenum  97.9054073  95.94
         | 
| 157 | 
            +
            Ag  Silver  106.905092  107.8682
         | 
| 158 | 
            +
            I Iodine  126.904473  126.90447
         | 
| 159 | 
            +
            Au  Gold  196.966543  196.96655
         | 
| 160 | 
            +
            Hg  Mercury 201.970617  200.59}
         | 
| 161 | 
            +
             | 
| 162 | 
            +
                atoms = str.split(/\n/)
         | 
| 163 | 
            +
                atoms.each do |atom_str|
         | 
| 164 | 
            +
                  next if atom_str.empty?
         | 
| 165 | 
            +
                  
         | 
| 166 | 
            +
                  symbol, name, monoisotopic, average = atom_str.split(/\s+/)
         | 
| 167 | 
            +
                  symbol =~ /(\d*)(\w+)/
         | 
| 168 | 
            +
                  isotope = $1.empty? ? nil : $1.to_i
         | 
| 169 | 
            +
                  symbol = $2
         | 
| 170 | 
            +
                  monoisotopic = monoisotopic.to_f
         | 
| 171 | 
            +
                  average = average.to_f
         | 
| 172 | 
            +
                  
         | 
| 173 | 
            +
                  element = Element[symbol]
         | 
| 174 | 
            +
                  assert_not_nil element, atom_str
         | 
| 175 | 
            +
                  assert element.has_isotope?(isotope), atom_str unless isotope == nil
         | 
| 176 | 
            +
             | 
| 177 | 
            +
                  assert_in_delta monoisotopic, element.mass(isotope), delta_mass, atom_str 
         | 
| 178 | 
            +
                  # TODO -- check average mass
         | 
| 179 | 
            +
                end
         | 
| 180 | 
            +
              end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
              # vs the VG Analytical Organic Mass Spectrometry reference, reference date unknown (prior to 2005)
         | 
| 183 | 
            +
              # the data from the data sheet was copied manually to doc/VG Analytical DataSheet.txt
         | 
| 184 | 
            +
              def test_mass_values_vs_vg_analytical
         | 
| 185 | 
            +
                str = %Q{
         | 
| 186 | 
            +
            H 1.0078250 1.00794
         | 
| 187 | 
            +
            C 12 12.011
         | 
| 188 | 
            +
            N 14.0030740 14.0067
         | 
| 189 | 
            +
            O 15.9949146 15.9994
         | 
| 190 | 
            +
            S 31.9720718 32.06}
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                atoms = str.split(/\n/)
         | 
| 193 | 
            +
                atoms.each do |atom_str|
         | 
| 194 | 
            +
                  next if atom_str.empty?
         | 
| 195 | 
            +
                  
         | 
| 196 | 
            +
                  symbol, monoisotopic, average = atom_str.split(/\s+/)
         | 
| 197 | 
            +
                  monoisotopic = monoisotopic.to_f
         | 
| 198 | 
            +
                  average = average.to_f
         | 
| 199 | 
            +
                  
         | 
| 200 | 
            +
                  element = Element[symbol]
         | 
| 201 | 
            +
                  assert_not_nil element, atom_str
         | 
| 202 | 
            +
                  assert_in_delta monoisotopic, element.mass, delta_mass, atom_str 
         | 
| 203 | 
            +
                  # TODO -- check average mass
         | 
| 204 | 
            +
                end    
         | 
| 205 | 
            +
              end
         | 
| 206 | 
            +
              
         | 
| 207 | 
            +
            end
         | 
| @@ -0,0 +1,43 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), '../../constants_test_helper.rb') 
         | 
| 2 | 
            +
            require 'constants/libraries/particle'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class ParticleTest < Test::Unit::TestCase
         | 
| 5 | 
            +
              include Constants::Libraries
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              #
         | 
| 8 | 
            +
              # initialize test
         | 
| 9 | 
            +
              #
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
              def test_initialize
         | 
| 12 | 
            +
                c = Particle::CHARM
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                assert_equal "Charm", c.name
         | 
| 15 | 
            +
                assert_equal "Fermion", c.family
         | 
| 16 | 
            +
                assert_equal "Quark", c.group
         | 
| 17 | 
            +
                assert_equal "Second", c.generation
         | 
| 18 | 
            +
                assert_equal 2.0/3, c.charge
         | 
| 19 | 
            +
                assert_equal 0.5, c.spin
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                t = Particle::ANTITAU
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                assert_equal "Anti-Tau", t.name
         | 
| 24 | 
            +
                assert_equal "Fermion", t.family
         | 
| 25 | 
            +
                assert_equal "Lepton", t.group
         | 
| 26 | 
            +
                assert_equal "Third", t.generation
         | 
| 27 | 
            +
                assert_equal -1, t.charge
         | 
| 28 | 
            +
                assert_equal 0.5, t.spin
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
              
         | 
| 31 | 
            +
              #
         | 
| 32 | 
            +
              # lookup test
         | 
| 33 | 
            +
              #
         | 
| 34 | 
            +
              
         | 
| 35 | 
            +
              def test_lookup
         | 
| 36 | 
            +
                c = Particle::CHARM
         | 
| 37 | 
            +
                assert_equal c, Particle['Charm']
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
              
         | 
| 40 | 
            +
              def test_lookup_is_nil_for_undefined_particles
         | 
| 41 | 
            +
                assert_nil Particle['Blop']
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
            end
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), '../../constants_test_helper.rb') 
         | 
| 2 | 
            +
            require 'constants/libraries/physical'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class PhysicalTest < Test::Unit::TestCase
         | 
| 5 | 
            +
              include Constants::Libraries
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              #
         | 
| 8 | 
            +
              # initialize test
         | 
| 9 | 
            +
              #
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
              def test_initialize
         | 
| 12 | 
            +
                c = Physical::SPEED_OF_LIGHT_IN_VACUUM
         | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                assert_equal "speed of light in vacuum", c.name
         | 
| 15 | 
            +
                assert_equal 299792458, c.value
         | 
| 16 | 
            +
                assert_equal 0, c.uncertainty
         | 
| 17 | 
            +
                assert_equal Unit.new("m/s"), c.unit
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
              
         | 
| 20 | 
            +
              #
         | 
| 21 | 
            +
              # lookup test
         | 
| 22 | 
            +
              #
         | 
| 23 | 
            +
              
         | 
| 24 | 
            +
              def test_lookup
         | 
| 25 | 
            +
                c = Physical::SPEED_OF_LIGHT_IN_VACUUM
         | 
| 26 | 
            +
                assert_equal c, Physical["speed of light in vacuum"]
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
              
         | 
| 29 | 
            +
              def test_lookup_is_nil_for_undefined_constants
         | 
| 30 | 
            +
                assert_nil Physical["made up blah in a blah"]
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
            end
         | 
| @@ -0,0 +1,125 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), '../constants_test_helper.rb') 
         | 
| 2 | 
            +
            require 'constants/library'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class Constants::LibraryTest < Test::Unit::TestCase
         | 
| 5 | 
            +
              include Constants
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              #
         | 
| 8 | 
            +
              # documentation test
         | 
| 9 | 
            +
              #
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              module Color
         | 
| 12 | 
            +
                RED = 'red'
         | 
| 13 | 
            +
                GREEN = 'green'
         | 
| 14 | 
            +
                BLUE = 'blue'
         | 
| 15 | 
            +
                GREY = 'grey'
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                include Constants::Library
         | 
| 18 | 
            +
                library.index_by('name') {|c| c }
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def test_documentation 
         | 
| 22 | 
            +
                ###
         | 
| 23 | 
            +
                assert_equal({
         | 
| 24 | 
            +
                  'red' => Color::RED,
         | 
| 25 | 
            +
                  'blue' => Color::BLUE,
         | 
| 26 | 
            +
                  'green' => Color::GREEN,
         | 
| 27 | 
            +
                  'grey' => Color::GREY},
         | 
| 28 | 
            +
                Color.index('name'))
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                assert_equal Color::RED, Color['red']
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                ###
         | 
| 33 | 
            +
                Color.library.index_by_attribute 'length'
         | 
| 34 | 
            +
                const_ordered_assert_equal({
         | 
| 35 | 
            +
                  3 => Color::RED,
         | 
| 36 | 
            +
                  4 => [Color::BLUE, Color::GREY],
         | 
| 37 | 
            +
                  5 => Color::GREEN},
         | 
| 38 | 
            +
                Color.index('length'))
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                const_ordered_assert_equal [Color::BLUE, Color::GREY], Color[4]
         | 
| 41 | 
            +
                
         | 
| 42 | 
            +
                ###
         | 
| 43 | 
            +
                Color.library.collect('gstar') {|c| c =~ /^g/ ? c : nil }
         | 
| 44 | 
            +
                const_ordered_assert_equal [Color::GREEN, Color::GREY], Color.collection('gstar')
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                Color.library.collect_attribute 'length'
         | 
| 47 | 
            +
                const_ordered_assert_equal [3,5,4,4], Color.collection('length')
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                ###
         | 
| 50 | 
            +
                Color.library.add('yellow')
         | 
| 51 | 
            +
                const_ordered_assert_equal({
         | 
| 52 | 
            +
                  3 => Color::RED,
         | 
| 53 | 
            +
                  4 => [Color::BLUE, Color::GREY],
         | 
| 54 | 
            +
                  5 => Color::GREEN,
         | 
| 55 | 
            +
                  6 => 'yellow'},
         | 
| 56 | 
            +
                Color.index('length'))
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                Color.module_eval %Q{
         | 
| 59 | 
            +
                  ORANGE = 'orange'
         | 
| 60 | 
            +
                  reset_library
         | 
| 61 | 
            +
                }
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                const_ordered_assert_equal({
         | 
| 64 | 
            +
                  3 => Color::RED,
         | 
| 65 | 
            +
                  4 => [Color::BLUE, Color::GREY],
         | 
| 66 | 
            +
                  5 => Color::GREEN,
         | 
| 67 | 
            +
                  6 => Color::ORANGE},
         | 
| 68 | 
            +
                Color.index('length'))
         | 
| 69 | 
            +
              end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
              #
         | 
| 72 | 
            +
              # extend test 
         | 
| 73 | 
            +
              #
         | 
| 74 | 
            +
              
         | 
| 75 | 
            +
              module ExtendModule
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
              
         | 
| 78 | 
            +
              def test_extend_initializes_library
         | 
| 79 | 
            +
                ExtendModule.extend Library
         | 
| 80 | 
            +
                assert ExtendModule.respond_to?(:library)
         | 
| 81 | 
            +
                assert ExtendModule.library.kind_of?(ConstantLibrary)
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
              
         | 
| 84 | 
            +
              #
         | 
| 85 | 
            +
              # include test 
         | 
| 86 | 
            +
              #
         | 
| 87 | 
            +
              
         | 
| 88 | 
            +
              module IncludeModule
         | 
| 89 | 
            +
                include Constants::Library
         | 
| 90 | 
            +
              end
         | 
| 91 | 
            +
              
         | 
| 92 | 
            +
              def test_include_initializes_library
         | 
| 93 | 
            +
                assert IncludeModule.respond_to?(:library)
         | 
| 94 | 
            +
                assert IncludeModule.library.kind_of?(ConstantLibrary)
         | 
| 95 | 
            +
              end
         | 
| 96 | 
            +
              
         | 
| 97 | 
            +
              #
         | 
| 98 | 
            +
              # benchmark tests
         | 
| 99 | 
            +
              #
         | 
| 100 | 
            +
              
         | 
| 101 | 
            +
              module BenchmarkModule
         | 
| 102 | 
            +
                include Constants::Library
         | 
| 103 | 
            +
                A = 'A'
         | 
| 104 | 
            +
                
         | 
| 105 | 
            +
                library.index_by("name") {|value| value}
         | 
| 106 | 
            +
                reset_library
         | 
| 107 | 
            +
              end
         | 
| 108 | 
            +
             | 
| 109 | 
            +
              def test_access_speed
         | 
| 110 | 
            +
                benchmark_test(24) do |x|
         | 
| 111 | 
            +
                  n = 100
         | 
| 112 | 
            +
                  x.report("#{n}k BenchmarkModule::A") do 
         | 
| 113 | 
            +
                    (n*10**3).times { BenchmarkModule::A }
         | 
| 114 | 
            +
                  end
         | 
| 115 | 
            +
              
         | 
| 116 | 
            +
                  x.report("#{n}k ['A']") do 
         | 
| 117 | 
            +
                    (n*10**3).times { BenchmarkModule['A'] }
         | 
| 118 | 
            +
                  end
         | 
| 119 | 
            +
                  
         | 
| 120 | 
            +
                  x.report("#{n}k index('name')['A']") do 
         | 
| 121 | 
            +
                    (n*10**3).times { BenchmarkModule.index('name')['A'] }
         | 
| 122 | 
            +
                  end
         | 
| 123 | 
            +
                end
         | 
| 124 | 
            +
              end
         | 
| 125 | 
            +
            end
         |