Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
3d097a032This file is pinned to the selected release. Download the original to open it in your design tool.
# File : begin
if { [array get Draw_Groups "TOPOLOGY Check commands"] == "" } {
pload TOPTEST
pload VISUALIZATION
}
# to prevent loops limit to 16 minutes
cpulimit 1000
set rel_tol 0
set max_rel_tol_diff 0
if { [info exists imagedir] == 0 } {
set imagedir .
}
if { [info exists test_image] == 0 } {
set test_image photo
}
# Procedure to check equality of two reals with tolerance (relative and absolute)
help checkarea {shape area_expected tol_abs tol_rel}
proc checkarea {shape area_expected tol_abs tol_rel} {
# compute area with half of the relative tolerance
# to be used in comparison; 0.001 is added to avoid zero value
set prop [uplevel sprops $shape [expr 0.5 * abs($tol_rel) + 0.001]]
# get the value
if { ! [regexp {Mass\s*:\s*([0-9.e+-]+)} $prop res area] } {
puts "Error: cannot get area of the shape $shape"
return
}
# compare with expected value
checkreal "area of $shape" $area $area_expected $tol_abs $tol_rel
}
# Check if area of triangles is valid
proc CheckTriArea {shape {eps 0}} {
upvar #0 $shape result
set area [triarea result $eps]
set t_area [lindex $area 0]
set g_area [expr abs([lindex $area 1])]
puts "area by triangles: $t_area"
puts "area by geometry: $g_area"
expr ($t_area - $g_area) / $g_area * 100
}
# Check expected time
proc checktime {value expected tol_rel message} {
set t1 [expr ${value} - ${expected}]
set t2 [expr ${expected} * abs (${tol_rel})]
if { abs (${t1}) <= ${t2} } {
puts "OK. ${message}, ${value} seconds, is equal to expected time - ${expected} seconds"
} elseif {${t1} > ${t2}} {
puts "Error. ${message}, ${value} seconds, is more than expected time - ${expected} seconds"
} else {
puts "Improvement. ${message}, ${value} seconds, is less than expected time - ${expected} seconds"
}
}
# Reads resource file, returns options from file as key-value dict
proc parse_resource_file {theFileName} {
# Creating empty dictionary
set aDict [dict create];
# Check for resource file
if { [info exists theFileName] == 0 } {
puts "Error: resource file \"${theFileName}\" isn't found"
return $aDict
}
# Open a resource file
set aFD [open "${theFileName}" "rb"]
set aLineNo 0
# Read line by line
while {[gets $aFD aLine] !=-1 } {
incr aLineNo
# Clear the line from comment
if {[regexp {(^[^!]+)} $aLine match aClearLine]} {
# remove spaces
set aClearLine [string trim $aClearLine]
if {[string length $aClearLine] != 0} {
if {[regexp {(\S+)\s*:\s*(\S*)} $aClearLine match aKey aValue]} {
dict set aDict $aKey $aValue
} else {
puts "Error: syntax error in resource file at line: ${aLineNo}"
}
}
}
}
close $aFD
return $aDict
}
# Creates new resource file with options as key-value dict
proc create_resource_file {theFileName theOptions} {
# Open a resource file
set aFD [open "${theFileName}" "wb"]
set aLineNo 0
# Write line by line
dict for {aKey aValue} $theOptions {
puts $aFD "${aKey} : ${aValue}"
}
close $aFD
}