--- /dev/null
+puts "============"
+puts "OCC22967"
+puts "============"
+puts ""
+############################################################################################################
+# Boolean operations between two cylinders with orthogonal axis generate a shape with big vertex tolerance
+###########################################################################################################
+
+set BugNumber OCC22967
+set check_value 1.04742e-05
+
+restore [locate_data_file bug22967_Cylinder_1.brep] b1
+restore [locate_data_file bug22967_Scale_1.brep] b2
+bop b1 b2
+bopfuse result
+set info [ maxtolerance result ]
+
+regexp {Edge[ \t]*:.*Max[ \t]*([-0-9.+eE]+)} $info full last1
+regexp {Vertex[ \t]*:.*Max[ \t]*([-0-9.+eE]+)} $info full last
+
+proc GetPercent {Value GoodValue} {
+ set Percent 0.
+ if {${GoodValue} != 0.} {
+ set Percent [expr abs(${Value} - ${GoodValue}) / abs(double(${GoodValue})) * 100.]
+ } elseif {${Value} != 0.} {
+ set Percent [expr abs(${GoodValue} - ${Value}) / abs(double(${Value})) * 100.]
+ } else {
+ set Percent 0.
+ }
+ return ${Percent}
+}
+
+set percent_max 5
+set status 0
+
+set Tolerance_percent [expr abs ( [GetPercent ${last} ${check_value}] ) ]
+if {${Tolerance_percent} > ${percent_max}} {
+ set status 1
+} else {
+ set status 0
+}
+
+set Tolerance_percent [expr abs ( [GetPercent ${last1} ${check_value}] ) ]
+if {${Tolerance_percent} > ${percent_max}} {
+ set status 1
+} else {
+ set status 0
+}
+
+# Resume
+if {${status} > 0} {
+ puts "${BugNumber}: Faulty"
+} else {
+ puts "OK ${BugNumber}"
+}
+
+set square 671262
+set 2dviewer 0
+