Changeset 146 for ruby/trunk
- Timestamp:
- Jun 26, 2009, 12:54:07 AM (15 years ago)
- Location:
- ruby/trunk/lib/models
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
ruby/trunk/lib/models/rm/data_types/quantity.rb
r145 r146 56 56 57 57 class DV_Quantified < DV_Ordered 58 attr_reader :magnitude, :magnitude_status , :accuracy58 attr_reader :magnitude, :magnitude_status 59 59 60 60 def initialize(magnitude, magnitude_status=nil, … … 165 165 166 166 class DV_Amount < DV_Quantified 167 attr_reader :accuracy _is_percent167 attr_reader :accuracy, :accuracy_percent 168 168 def initialize(magnitude, magnitude_status=nil, accuracy=nil, 169 169 accuracy_percent=nil, normal_range=nil, … … 171 171 super(magnitude, magnitude_status, normal_range, 172 172 normal_status, other_reference_ranges) 173 set_accuracy(accuracy, accuracy_percent) unless accuracy.nil? 173 unless accuracy.nil? 174 set_accuracy(accuracy, accuracy_percent) 175 else 176 @accuracy, @accuracy_percent = nil, nil 177 end 174 178 end 175 179 def +(other) … … 196 200 197 201 class DV_Quantity < DV_Amount 198 202 attr_reader :units, :precision 203 def initialize(magnitude, units, magnitude_status=nil, precision=nil, 204 accuracy=nil, accuracy_percent=nil, normal_range=nil, 205 normal_status = nil, other_reference_ranges=nil) 206 super(magnitude, magnitude_status, accuracy, accuracy_percent, 207 normal_range, normal_status, other_reference_ranges) 208 self.units = units 209 self.precision = precision 210 end 211 212 def units=(units) 213 raise ArgumentError, 'units should not be nil' if units.nil? 214 @units = units 215 end 216 217 def precision=(precision) 218 unless precision.nil? || precision >= -1 219 raise ArgumentError, 'precision invalid' 220 end 221 @precision = precision 222 end 223 224 def is_strictly_comparable_to?(others) 225 return false if others.nil? 226 if others.instance_of?(DV_Quantity) && others.units == @units 227 return true 228 else 229 return false 230 end 231 end 232 233 def is_integral? 234 if @precision.nil? || precision != 0 235 return false 236 else 237 return true 238 end 239 end 240 # accuracy??? 241 def +(other) 242 unless self.is_strictly_comparable_to?(other) 243 raise ArgumentError, 'type mismatch' 244 end 245 return DV_Quantity.new(@magnitude+other.magnitude, @units, 246 @magnitude_status, @precision, 247 @accuracy, @accuracy_percent, @normal_range, 248 @normal_status, @other_reference_ranges) 249 end 250 def -(other) 251 other.magnitude = - other.magnitude 252 self+(other) 253 end 199 254 end 200 255 -
ruby/trunk/lib/models/tests/rm/test_data_types.rb
r145 r146 182 182 @dv_amount = OpenEHR::RM::Data_Types::Quantity::DV_Amount.new(2,'<')} 183 183 assert_nothing_raised(Exception){ 184 @dv_quantity = OpenEHR::RM::Data_Types::Quantity::DV_Quantity.new(3, '~')}184 @dv_quantity = OpenEHR::RM::Data_Types::Quantity::DV_Quantity.new(3, 'mg', '~')} 185 185 end 186 186 … … 275 275 assert_nothing_raised(Exception){@dv_ordinal1.limits = limit_reference_range} 276 276 assert_equal 'limits', @dv_ordinal1.limits.meaning.value 277 end 278 279 def test_dv_quantity 280 assert_equal 3, @dv_quantity.magnitude 281 assert_equal 'mg', @dv_quantity.units 282 assert_equal '~', @dv_quantity.magnitude_status 283 dv_quantity2 = OpenEHR::RM::Data_Types::Quantity::DV_Quantity.new(4, 'mg', '~') 284 assert_equal 'mg', dv_quantity2.units 285 assert @dv_quantity.is_strictly_comparable_to?(dv_quantity2) 286 assert_nothing_raised(Exception){@dv_quantity.precision = -1} 287 assert_equal(-1, @dv_quantity.precision) 288 assert !@dv_quantity.is_integral? 289 assert_raise(ArgumentError){@dv_quantity.precision = -1.1} 290 @dv_quantity.precision = 0 291 assert @dv_quantity.is_integral? 292 dv_quantity3 = @dv_quantity + dv_quantity2 293 assert_equal 7, dv_quantity3.magnitude 294 assert_equal 'mg', dv_quantity3.units 295 dv_quantity3 = @dv_quantity - dv_quantity2 296 assert_equal(-1, dv_quantity3.magnitude) 297 assert_equal 'mg', dv_quantity3.units 277 298 end 278 299
Note:
See TracChangeset
for help on using the changeset viewer.