Changeset 144 for ruby/trunk


Ignore:
Timestamp:
Jun 23, 2009, 11:12:16 AM (15 years ago)
Author:
KOBAYASHI, Shinji
Message:

ref #50
DV_Quantified finished

Location:
ruby/trunk/lib/models
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • ruby/trunk/lib/models/rm/data_types/quantity.rb

    r142 r144  
    5656
    5757        class DV_Quantified < DV_Ordered
    58 
    59           def initialize(normal_range=nil, normal_status = nil,
     58          attr_reader :magnitude, :accuracy, :magnitude_status
     59
     60          def initialize(magnitude, magnitude_status=nil,
     61                         normal_range=nil, normal_status = nil,
    6062                         other_reference_ranges=nil)
    6163            super(normal_range, normal_status, other_reference_ranges)
    62           end
    63 
    64           def magnitude
    65            
     64            self.magnitude = magnitude
     65            self.magnitude_status = magnitude_status
    6666          end
    6767
     
    7070          end
    7171
    72           def valid_magnitude_status(s)
    73 
     72          def magnitude=(magnitude)
     73            raise ArgumentError, 'magnitude should not be nil' if magnitude.nil?
     74            @magnitude = magnitude
     75          end
     76
     77          def magnitude_status=(magnitude_status)
     78            if magnitude_status.nil?
     79              @magnitude_status = '='
     80            elsif DV_Quantified.valid_magnitude_status?(magnitude_status)
     81              @magnitude_status = magnitude_status
     82            else
     83              raise ArgumentError, 'magnitude_status invalid'
     84            end
     85          end
     86
     87          def accuracy=(accuracy)
     88            raise NotImplementedError, 'subclasses need to implemented'
     89          end
     90
     91          def accuracy_unknown?
     92            return accuracy.nil?
     93          end
     94
     95          def self.valid_magnitude_status?(s)
     96            if s == '=' || s == '>' || s == '<' || s == '<=' ||
     97                s == '>=' || s == '~'
     98              return true
     99            else
     100              return false
     101            end
    74102          end
    75103        end
     
    153181
    154182        class Reference_Range
    155           attr_reader :meaning
    156 
    157           def initialize(meaning)
     183          attr_reader :meaning, :range
     184
     185          def initialize(meaning, range)
    158186            self.meaning = meaning
     187            self.range = range
    159188          end
    160189
     
    164193            end
    165194            @meaning = meaning
     195          end
     196
     197          def range=(range)
     198            if range.nil?
     199              raise ArgumentError, 'range should not be nil'
     200            end
     201            @range = range
     202          end
     203
     204          def is_in_range?(val)
     205            return @range.has?(val)
    166206          end
    167207        end
  • ruby/trunk/lib/models/tests/rm/test_data_types.rb

    r143 r144  
    165165      @dv_ordered = OpenEHR::RM::Data_Types::Quantity::DV_Ordered.new }
    166166    assert_nothing_raised(Exception){
    167       @dv_interval = OpenEHR::RM::Data_Types::Quantity::DV_Interval.new(1,10)}
    168     meaning = OpenEHR::RM::Data_Types::Text::DV_Text.new('normal')
    169     assert_nothing_raised(Exception){
    170       @reference_range = OpenEHR::RM::Data_Types::Quantity::Reference_Range.new(meaning)}
    171     assert_nothing_raised(Exception){
    172167      terminology = OpenEHR::RM::Support::Identification::Terminology_ID.new('urine', '')
    173168      code_phrase = OpenEHR::RM::Data_Types::Text::Code_Phrase.new('protein',terminology)
    174169      urinary_protein = OpenEHR::RM::Data_Types::Text::DV_Coded_Text.new('+', code_phrase)
    175       @dv_ordinal = OpenEHR::RM::Data_Types::Quantity::DV_Ordinal.new(1, urinary_protein)}
    176     assert_nothing_raised(Exception){
    177       @dv_quantified = OpenEHR::RM::Data_Types::Quantity::DV_Quantified.new }
    178     assert_nothing_raised(Exception){
    179       @dv_amount = OpenEHR::RM::Data_Types::Quantity::DV_Amount.new}
    180     assert_nothing_raised(Exception){
    181       @dv_quantity = OpenEHR::RM::Data_Types::Quantity::DV_Quantity.new}
     170      @dv_ordinal1 = OpenEHR::RM::Data_Types::Quantity::DV_Ordinal.new(1, urinary_protein)
     171      code_phrase = OpenEHR::RM::Data_Types::Text::Code_Phrase.new('protein',terminology)
     172      urinary_protein = OpenEHR::RM::Data_Types::Text::DV_Coded_Text.new('+++', code_phrase)
     173      @dv_ordinal2 = OpenEHR::RM::Data_Types::Quantity::DV_Ordinal.new(3, urinary_protein)}
     174    assert_nothing_raised(Exception){
     175      @dv_interval = OpenEHR::RM::Data_Types::Quantity::DV_Interval.new(@dv_ordinal1, @dv_ordinal2)}
     176    meaning = OpenEHR::RM::Data_Types::Text::DV_Text.new('normal')
     177    assert_nothing_raised(Exception){
     178      @reference_range = OpenEHR::RM::Data_Types::Quantity::Reference_Range.new(meaning, @dv_interval)}
     179    assert_nothing_raised(Exception){
     180      @dv_quantified = OpenEHR::RM::Data_Types::Quantity::DV_Quantified.new(1,'=')}
     181    assert_nothing_raised(Exception){
     182      @dv_amount = OpenEHR::RM::Data_Types::Quantity::DV_Amount.new(1)}
     183    assert_nothing_raised(Exception){
     184      @dv_quantity = OpenEHR::RM::Data_Types::Quantity::DV_Quantity.new(1)}
    182185   end
    183186
     
    187190     assert_instance_of OpenEHR::RM::Data_Types::Quantity::DV_Interval, @dv_interval
    188191     assert_instance_of OpenEHR::RM::Data_Types::Quantity::Reference_Range, @reference_range
    189      
    190      assert_instance_of OpenEHR::RM::Data_Types::Quantity::DV_Ordinal, @dv_ordinal
     192     assert_instance_of OpenEHR::RM::Data_Types::Quantity::DV_Ordinal, @dv_ordinal1
     193     assert_instance_of OpenEHR::RM::Data_Types::Quantity::DV_Ordinal, @dv_ordinal2
    191194     assert_instance_of OpenEHR::RM::Data_Types::Quantity::DV_Quantified, @dv_quantified
    192195     assert_instance_of OpenEHR::RM::Data_Types::Quantity::DV_Amount, @dv_amount
     
    213216
    214217  def test_dv_interval
    215     assert
     218    assert @dv_interval.lower < @dv_interval.upper
    216219  end
    217220
    218221  def test_reference_range
    219     assert_equal 'normal', @reference_range.meaning.value   
    220   end
    221 
    222   def test_dv_quantified
    223    
    224   end
    225 
    226   def test_dv_amount
    227 
    228   end
    229 
    230   def test_dv_ordinal
    231     assert_equal 1, @dv_ordinal.value
    232     assert_equal '+', @dv_ordinal.symbol.value
    233     assert_raise(ArgumentError){@dv_ordinal.symbol = nil}
    234     assert_raise(ArgumentError){@dv_ordinal.value = nil}
     222    assert_equal 'normal', @reference_range.meaning.value
     223    assert_equal 1, @reference_range.range.lower.value
    235224    terminology = OpenEHR::RM::Support::Identification::Terminology_ID.new('urine', '')
    236225    code_phrase = OpenEHR::RM::Data_Types::Text::Code_Phrase.new('protein',terminology)
    237226    urinary_protein = OpenEHR::RM::Data_Types::Text::DV_Coded_Text.new('++', code_phrase)
    238     assert_nothing_raised(Exception){
    239       @dv_ordinal2 = OpenEHR::RM::Data_Types::Quantity::DV_Ordinal.new(2, urinary_protein)}
    240     assert @dv_ordinal.is_strictly_comparable_to?(@dv_ordinal2)
    241     assert @dv_ordinal < @dv_ordinal2
    242     assert @dv_ordinal2 > @dv_ordinal
    243     @dv_ordinal.value = 3
    244     assert 3, @dv_ordinal.value
    245     assert @dv_ordinal > @dv_ordinal2
    246     assert_raise(ArgumentError){@dv_ordinal.limits = @reference_range}
     227    dv_ordinal = OpenEHR::RM::Data_Types::Quantity::DV_Ordinal.new(2, urinary_protein)
     228    assert @reference_range.is_in_range?(dv_ordinal)
     229    dv_ordinal.value = 6
     230    assert !@reference_range.is_in_range?(dv_ordinal)
     231  end
     232
     233  def test_dv_quantified
     234    assert_equal 1, @dv_quantified.magnitude
     235    assert_equal '=', @dv_quantified.magnitude_status
     236    assert !OpenEHR::RM::Data_Types::Quantity::DV_Quantified.valid_magnitude_status?('*')
     237    assert OpenEHR::RM::Data_Types::Quantity::DV_Quantified.valid_magnitude_status?('>')
     238    assert OpenEHR::RM::Data_Types::Quantity::DV_Quantified.valid_magnitude_status?('<')
     239    assert OpenEHR::RM::Data_Types::Quantity::DV_Quantified.valid_magnitude_status?('>=')
     240    assert OpenEHR::RM::Data_Types::Quantity::DV_Quantified.valid_magnitude_status?('<=')
     241    assert OpenEHR::RM::Data_Types::Quantity::DV_Quantified.valid_magnitude_status?('~')
     242    assert_nothing_raised(Exception){@dv_quantified.magnitude = 0}
     243    assert_equal 0, @dv_quantified.magnitude
     244    assert_nothing_raised(Exception){@dv_quantified.magnitude_status = nil}
     245    assert_equal '=',  @dv_quantified.magnitude_status
     246  end
     247
     248  def test_dv_amount
     249
     250  end
     251
     252  def test_dv_ordinal
     253    assert_equal 1, @dv_ordinal1.value
     254    assert_equal '+', @dv_ordinal1.symbol.value
     255    assert_raise(ArgumentError){@dv_ordinal1.symbol = nil}
     256    assert_raise(ArgumentError){@dv_ordinal1.value = nil}
     257    assert @dv_ordinal1.is_strictly_comparable_to?(@dv_ordinal2)
     258    assert @dv_ordinal1 < @dv_ordinal2
     259    assert @dv_ordinal2 > @dv_ordinal1
     260    @dv_ordinal1.value = 4
     261    assert 4, @dv_ordinal1.value
     262    assert @dv_ordinal1 > @dv_ordinal2
     263    assert_raise(ArgumentError){@dv_ordinal1.limits = @reference_range}
    247264    meaning = OpenEHR::RM::Data_Types::Text::DV_Text.new('limits')
    248     limit_reference_range = OpenEHR::RM::Data_Types::Quantity::Reference_Range.new(meaning)
    249     assert_nothing_raised(Exception){@dv_ordinal.limits = limit_reference_range}
    250     assert_equal 'limits', @dv_ordinal.limits.meaning.value
     265    limit_reference_range = OpenEHR::RM::Data_Types::Quantity::Reference_Range.new(meaning, @dv_interval)
     266    assert_nothing_raised(Exception){@dv_ordinal1.limits = limit_reference_range}
     267    assert_equal 'limits', @dv_ordinal1.limits.meaning.value
    251268  end
    252269
Note: See TracChangeset for help on using the changeset viewer.