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