puts "============"
puts "OCC24623_3"
puts "============"
puts ""
#######################################################################
puts "Visualization - improve selection mechanism"
# tests memory leaks in creation of selection primitives for connected
# interactive objects: checks that there is no "dead links" in removing
#                      Select3D_BVHPrimitiveContent
#######################################################################

puts ""
pload MODELING VISUALIZATION
psphere s 0.5
tclean  s
incmesh s 0.001
trinfo  s

set aMemInit [meminfo h]

set aNb 1000

# display as copies
eval compound [lrepeat $aNb s] ss
explode ss
for {set i 1} {$i <= $aNb} {incr i} { vloadselection ss_${i}; vsetlocation -noupdate ss_${i} ${i} 0 0 }
vfit
set aMemSel1  [meminfo h]
vclear
set aMemClear1 [meminfo h]

# display as connected instances of single presentation
vconnectto i_1 0 0 0 s -nodisplay
vloadselection i_1
for {set i 2} {$i < $aNb} {incr i} { vconnectto i_${i} ${i} 0 0 i_1 -nodisplay; vloadselection i_${i} }
set aMemSel2  [meminfo h]
vclear
set aMemClear2 [meminfo h]

puts "Initial memory               : [expr $aMemInit   / (1024 * 1024)] MiB"
puts "Compute selection (simple)   : [expr $aMemSel1  / (1024 * 1024)] MiB"
puts "Clearing (simple)            : [expr $aMemClear1 / (1024 * 1024)] MiB"
puts "Compute selection (connected): [expr $aMemSel2  / (1024 * 1024)] MiB"
puts "Clearing (connected)         : [expr $aMemClear2 / (1024 * 1024)] MiB"

set aRatio [expr $aMemClear2 / double($aMemClear1)]

# check if the memory difference is greater than 10%
if {[expr $aRatio > 1.1]} {
    puts "Error : TEST FAILED"
}
