ae4cba0ddcaf4f6d066529415f1969d3e30973e5
1 puts "========"
2 puts "CR24264"
3 puts "========"
4 puts ""
5 #######################################################################
6 # OCCT 6.6.0: cutting 1600 cylinders from a box leads to out-of-memory on 32-bit system
7 #######################################################################
9 # test cutting box by many holes, inspired by
11 # in OCCT 6.6.0 32-bit mode on Windows this fails with N >= 40 (out of memory)
13 # box plate to cut the holes from
14 box b 100 100 1
16 # N defines number of holes along each of X and Y, thus total N^2 holes
17 # will be drilled; note that the algorithm iself is likely to be quadratic
18 # for number of shapes, i.e. CPU ~ N^4
19 set N 40
20 set holes {}
21 for {set i 1} {\$i < \$N} {incr i} {
22     for {set j 1} {\$j < \$N} {incr j} {
23        pcylinder p_\${i}_\$j 0.5 1
24        ttranslate p_\${i}_\$j [expr \$i * 100. / \$N]  [expr \$j * 100. / \$N]  0.
25        lappend holes p_\${i}_\$j
26     }
27 }
29 eval compound \$holes drill
31 set mem1 [meminfo h]
33 dchrono cpu reset
34 dchrono cpu start
36 bcut r b drill
38 dchrono cpu stop
39 puts [dchrono cpu show]
40 set q2 [dchrono cpu show]
42 set mem2 [meminfo h]
44 set mem1 [expr \${mem1}/(1024 * 1024)]
45 set mem2 [expr \${mem2}/(1024 * 1024)]
46 set mem_delta 70
47 puts "mem1=\${mem1}"
48 puts "mem2=\${mem2}"
49 puts "mem_delta=\${mem_delta}"
51 if { [expr \${mem2} - \${mem1}] > \${mem_delta}} {
52     puts "Faulty : there is memory leak"
53 }
55 regexp {CPU user time: ([-0-9.+eE]+) seconds} \${q2} full z
56 if { [string compare \$tcl_platform(platform) "windows"] == 0 }  {
57    puts "OS = Windows NT"
58    set max_time 200
59 } else {
60    puts "OS = Linux"
61    set max_time 250
62 }
63 if { \${z} > \${max_time} } {
64     puts "Elapsed time is more than \${max_time} seconds - Faulty"
65 } else {
66     puts "Elapsed time is less than \${max_time} seconds - OK"
67 }
69 vinit
70 vdisplay r
71 vfit