# File lib/ruby-vpi/vpi.rb, line 125
125:     def put_value aValue, aFormat = nil, aTime = nil, aDelay = VpiNoDelay
126:       aFormat =
127:         if aFormat
128:           resolve_prop_type(aFormat)
129:         else
130:           get_value_wrapper(VpiObjTypeVal).format
131:         end
132: 
133:       newVal = S_vpi_value.new
134:       newVal.format = aFormat
135: 
136:       case aFormat
137:         when VpiBinStrVal, VpiOctStrVal, VpiDecStrVal, VpiHexStrVal, VpiStringVal
138:           newVal.value.str = aValue.to_s
139: 
140:         when VpiScalarVal
141:           newVal.value.scalar = aValue
142: 
143:         when VpiIntVal
144:           newVal.format = VpiHexStrVal
145:           newVal.value.str = aValue.to_i.to_s(16)
146: 
147:         when VpiRealVal
148:           newVal.value.real = aValue.to_f
149: 
150:         when VpiTimeVal
151:           newVal.value.time = aValue
152: 
153:         when VpiVectorVal
154:           newVal.value.vector = aValue
155: 
156:         when VpiStrengthVal
157:           newVal.value.strength = aValue
158: 
159:         else
160:           raise "unknown S_vpi_value.format: #{newVal.format}"
161:       end
162: 
163:       vpi_put_value self, newVal, aTime, aDelay
164: 
165:       # ensure that value was written correctly
166:         readenVal = get_value(aFormat)
167: 
168:         writtenCorrectly =
169:           case aFormat
170:             when VpiBinStrVal, VpiOctStrVal, VpiDecStrVal, VpiHexStrVal
171:               if aValue =~ /[xz]/i  # TODO: verify 'z' behavior
172:                 readenVal =~ /[xz]/i
173:               else
174:                 readenVal == aValue.to_s
175:               end
176: 
177:             when VpiStringVal
178:               readenVal == aValue.to_s
179: 
180:             when VpiIntVal
181:               # allow for register overflow when limit reached
182:               readenVal == (aValue.to_i % (2 ** self.vpiSize))
183: 
184:             when VpiRealVal
185:               readenVal == aValue.to_f
186: 
187:             else
188:               true
189:           end
190: 
191:         unless writtenCorrectly
192:           raise "value written (#{aValue.inspect}) does not match value read (#{readenVal.inspect}) from handle #{self}"
193:         end
194: 
195:       aValue
196:     end