Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

Changeset 1141

Show
Ignore:
Timestamp:
12/28/03 11:03:35 (5 years ago)
Author:
nahi
Message:

* lib/xsd/datatypes.rb: check the smallest positive non-zero single-precision

float exactly instead of packing with "f". [ruby-talk:88822]

* test/soap/test_basetype.rb, test/xsd/test_xsd.rb: use 1.402e-45, not 1.4e-45.

1.4e-45 is smaller than 2 ** -149...

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/xsd/datatypes.rb

    r1072 r1141  
    269269module FloatConstants 
    270270  NaN = 0.0/0.0 
    271   POSITIVE_INF = 1.0/0.0 
     271  POSITIVE_INF = +1.0/0.0 
    272272  NEGATIVE_INF = -1.0/0.0 
     273  POSITIVE_ZERO = +1.0/POSITIVE_INF 
     274  NEGATIVE_ZERO = -1.0/POSITIVE_INF 
     275  MIN_POSITIVE_SINGLE = 2 ** -149 
    273276end 
    274277 
     
    321324      '-INF' 
    322325    else 
    323       sign = (1 / @data > 0.0) ? '+' : '-' 
     326      sign = XSDFloat.positive?(@data) ? '+' : '-' 
    324327      sign + sprintf("%.10g", @data.abs).sub(/[eE]([+-])?0+/) { 'e' + $1 } 
    325328    end 
     
    330333    if f.nan? || f.infinite? 
    331334      f 
     335    elsif f.abs < MIN_POSITIVE_SINGLE 
     336      XSDFloat.positive?(f) ? POSITIVE_ZERO : NEGATIVE_ZERO 
    332337    else 
    333       packed = [f].pack("f") 
    334       (/\A\0*\z/ =~ packed)? 0.0 : f 
    335     end 
     338      f 
     339    end 
     340  end 
     341 
     342  def self.positive?(value) 
     343    (1 / value) > 0.0 
    336344  end 
    337345end 
  • trunk/test/soap/test_basetype.rb

    r1136 r1141  
    157157      3.14159265358979, 
    158158      12.34e36, 
    159       1.4e-45, 
    160       -1.4e-45, 
     159      1.402e-45, 
     160      -1.402e-45, 
    161161    ] 
    162162    targets.each do |f| 
     
    167167      "+3.141592654", 
    168168      "+1.234e+37", 
    169       "+1.4e-45", 
    170       "-1.4e-45", 
     169      "+1.402e-45", 
     170      "-1.402e-45", 
    171171    ] 
    172172    targets.each do |f| 
     
    179179      [3.14159265358979, "+3.141592654"], 
    180180      [12.34e36, "+1.234e+37"], 
    181       [1.4e-45, "+1.4e-45"], 
    182       [-1.4e-45, "-1.4e-45"], 
    183       ["1.4e", "+1.4"], 
     181      [1.402e-45, "+1.402e-45"], 
     182      [-1.402e-45, "-1.402e-45"], 
     183      ["1.402e", "+1.402"], 
    184184      ["12.34E36", "+1.234e+37"], 
    185       ["1.4E-45", "+1.4e-45"], 
    186       ["-1.4E-45", "-1.4e-45"], 
    187       ["1.4E", "+1.4"], 
     185      ["1.402E-45", "+1.402e-45"], 
     186      ["-1.402E-45", "-1.402e-45"], 
     187      ["1.402E", "+1.402"], 
    188188    ] 
    189189    targets.each do |f, str| 
     
    222222      3.14159265358979, 
    223223      12.34e36, 
    224       1.4e-45, 
    225       -1.4e-45, 
     224      1.402e-45, 
     225      -1.402e-45, 
    226226    ] 
    227227    targets.each do |f| 
     
    232232      "+3.14159265358979", 
    233233      "+1.234e+37", 
    234       "+1.4e-45", 
    235       "-1.4e-45", 
     234      "+1.402e-45", 
     235      "-1.402e-45", 
    236236    ] 
    237237    targets.each do |f| 
     
    244244      [3.14159265358979, "+3.14159265358979"], 
    245245      [12.34e36, "+1.234e+37"], 
    246       [1.4e-45, "+1.4e-45"], 
    247       [-1.4e-45, "-1.4e-45"], 
    248       ["1.4e", "+1.4"], 
     246      [1.402e-45, "+1.402e-45"], 
     247      [-1.402e-45, "-1.402e-45"], 
     248      ["1.402e", "+1.402"], 
    249249      ["12.34E36", "+1.234e+37"], 
    250       ["1.4E-45", "+1.4e-45"], 
    251       ["-1.4E-45", "-1.4e-45"], 
    252       ["1.4E", "+1.4"], 
     250      ["1.402E-45", "+1.402e-45"], 
     251      ["-1.402E-45", "-1.402e-45"], 
     252      ["1.402E", "+1.402"], 
    253253    ] 
    254254    targets.each do |f, str| 
  • trunk/test/xsd/test_xsd.rb

    r1136 r1141  
    190190      3.14159265358979, 
    191191      12.34e36, 
    192       1.4e-45, 
    193       -1.4e-45, 
     192      1.402e-45, 
     193      -1.402e-45, 
    194194    ] 
    195195    targets.each do |f| 
     
    200200      "+3.141592654", 
    201201      "+1.234e+37", 
    202       "+1.4e-45", 
    203       "-1.4e-45", 
     202      "+1.402e-45", 
     203      "-1.402e-45", 
    204204    ] 
    205205    targets.each do |f| 
     
    212212      [3.14159265358979, "+3.141592654"], 
    213213      [12.34e36, "+1.234e+37"], 
    214       [1.4e-45, "+1.4e-45"], 
    215       [-1.4e-45, "-1.4e-45"], 
    216       ["1.4e", "+1.4"], 
     214      [1.402e-45, "+1.402e-45"], 
     215      [-1.402e-45, "-1.402e-45"], 
     216      ["1.402e", "+1.402"], 
    217217      ["12.34E36", "+1.234e+37"], 
    218       ["1.4E-45", "+1.4e-45"], 
    219       ["-1.4E-45", "-1.4e-45"], 
    220       ["1.4E", "+1.4"], 
     218      ["1.402E-45", "+1.402e-45"], 
     219      ["-1.402E-45", "-1.402e-45"], 
     220      ["1.402E", "+1.402"], 
    221221    ] 
    222222    targets.each do |f, str| 
     
    255255      3.14159265358979, 
    256256      12.34e36, 
    257       1.4e-45, 
    258       -1.4e-45, 
     257      1.402e-45, 
     258      -1.402e-45, 
    259259    ] 
    260260    targets.each do |f| 
     
    265265      "+3.14159265358979", 
    266266      "+1.234e+37", 
    267       "+1.4e-45", 
    268       "-1.4e-45", 
     267      "+1.402e-45", 
     268      "-1.402e-45", 
    269269    ] 
    270270    targets.each do |f| 
     
    277277      [3.14159265358979, "+3.14159265358979"], 
    278278      [12.34e36, "+1.234e+37"], 
    279       [1.4e-45, "+1.4e-45"], 
    280       [-1.4e-45, "-1.4e-45"], 
    281       ["1.4e", "+1.4"], 
     279      [1.402e-45, "+1.402e-45"], 
     280      [-1.402e-45, "-1.402e-45"], 
     281      ["1.402e", "+1.402"], 
    282282      ["12.34E36", "+1.234e+37"], 
    283       ["1.4E-45", "+1.4e-45"], 
    284       ["-1.4E-45", "-1.4e-45"], 
    285       ["1.4E", "+1.4"], 
     283      ["1.402E-45", "+1.402e-45"], 
     284      ["-1.402E-45", "-1.402e-45"], 
     285      ["1.402E", "+1.402"], 
    286286    ] 
    287287    targets.each do |f, str|