File indexing completed on 2026-04-09 07:49:14
0001
0002
0003 #include <cstring>
0004 #include <iostream>
0005 #include <sstream>
0006 #include <iomanip>
0007 #include <vector>
0008
0009 #include "OpticksCSG.h"
0010
0011
0012 void test_type()
0013 {
0014 std::cerr << "test_type" << std::endl ;
0015
0016 for(unsigned i=0 ; i < 100 ; i++)
0017 {
0018 OpticksCSG_t type = (OpticksCSG_t)i ;
0019 if(!CSG::Exists(type)) continue ;
0020
0021 const char* name = CSG::Name( type );
0022
0023 std::cout
0024 << " type " << std::setw(3) << type
0025 << " name " << std::setw(20) << name
0026 << std::endl ;
0027
0028
0029 }
0030 }
0031
0032 void test_TypeMask()
0033 {
0034 std::cerr << "test_TypeMask" << std::endl ;
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046 std::vector<unsigned> masks = {{
0047 0u,
0048 CSG::Mask(CSG_DIFFERENCE),
0049 CSG::Mask(CSG_INTERSECTION),
0050 CSG::Mask(CSG_INTERSECTION) | CSG::Mask(CSG_DIFFERENCE),
0051 CSG::Mask(CSG_UNION),
0052 CSG::Mask(CSG_UNION) | CSG::Mask(CSG_DIFFERENCE),
0053 CSG::Mask(CSG_UNION) | CSG::Mask(CSG_INTERSECTION),
0054 CSG::Mask(CSG_UNION) | CSG::Mask(CSG_INTERSECTION) | CSG::Mask(CSG_DIFFERENCE)
0055 }};
0056
0057 for(unsigned i=0 ; i < masks.size() ; i++)
0058 {
0059 unsigned mask = masks[i] ;
0060 std::cout
0061 << " i " << std::setw(5) << i
0062 << " mask " << std::setw(5) << mask
0063 << " CSG::TypeMask(mask) " << std::setw(10) << CSG::TypeMask(mask)
0064 << " CSG::IsPositiveMask(mask) " << std::setw(2) << CSG::IsPositiveMask(mask)
0065 << std::endl
0066 ;
0067 }
0068
0069 }
0070
0071
0072 void test_HintCode(const char* name)
0073 {
0074 unsigned hintcode = CSG::HintCode(name);
0075 std::cout
0076 << " name " << std::setw(40) << name
0077 << " hintcode " << std::setw(6) << hintcode
0078 << " CSG::Name(hintcode) " << std::setw(15) << CSG::Name(hintcode)
0079 << std::endl
0080 ;
0081
0082 }
0083
0084 const char* NAMES = R"LITERAL(
0085 Hello_CSG_CONTIGUOUS
0086 Hello_CSG_DISCONTIGUOUS
0087 Hello_CSG_OVERLAP
0088 Name_without_any_hint
0089 )LITERAL";
0090
0091 void test_HintCode()
0092 {
0093 std::stringstream ss(NAMES) ;
0094 std::string name ;
0095 while (std::getline(ss, name)) if(!name.empty()) test_HintCode(name.c_str());
0096 }
0097
0098
0099 void test_OffsetType()
0100 {
0101 std::vector<unsigned> types = {
0102 CSG_ZERO,
0103 CSG_TREE,
0104 CSG_UNION,
0105 CSG_INTERSECTION,
0106 CSG_DIFFERENCE,
0107 CSG_LIST,
0108 CSG_CONTIGUOUS,
0109 CSG_DISCONTIGUOUS,
0110 CSG_OVERLAP,
0111 CSG_LEAF,
0112 CSG_SPHERE,
0113 CSG_BOX,
0114 CSG_ZSPHERE,
0115 CSG_TUBS,
0116 CSG_CYLINDER,
0117 CSG_SLAB,
0118 CSG_PLANE,
0119 CSG_CONE,
0120 CSG_BOX3,
0121 CSG_TRAPEZOID,
0122 CSG_CONVEXPOLYHEDRON,
0123 CSG_DISC,
0124 CSG_SEGMENT,
0125 CSG_ELLIPSOID,
0126 CSG_TORUS,
0127 CSG_HYPERBOLOID,
0128 CSG_CUBIC,
0129 CSG_INFCYLINDER,
0130 CSG_PHICUT,
0131 CSG_THETACUT,
0132 CSG_UNDEFINED
0133 };
0134
0135 for(unsigned i=0 ; i < types.size() ; i++)
0136 {
0137 OpticksCSG_t type = (OpticksCSG_t)types[i];
0138 const char* name = CSG::Name(type) ;
0139 int type2 = CSG::TypeCode(name);
0140 const char* name2 = CSG::Name(type2) ;
0141
0142 unsigned offset_type = CSG::OffsetType(type);
0143 unsigned type3 = CSG::TypeFromOffsetType( offset_type );
0144
0145 std::cout
0146 << " i " << std::setw(3) << i
0147 << " type " << std::setw(3) << type
0148 << " offset_type " << std::setw(3) << offset_type
0149 << " CSG::Tag(type) " << std::setw(10) << CSG::Tag(type)
0150 << " CSG::Name(type) " << std::setw(15) << name
0151 << " CSG::Name(type2) " << std::setw(15) << name2
0152 << " CSG::IsPrimitive(type) " << std::setw(2) << CSG::IsPrimitive(type)
0153 << " CSG::IsList(type) " << std::setw(2) << CSG::IsList(type)
0154 << " CSG::IsCompound(type) " << std::setw(2) << CSG::IsCompound(type)
0155 << " CSG::IsLeaf(type) " << std::setw(2) << CSG::IsLeaf(type)
0156 << std::endl
0157 ;
0158 assert( type2 == type );
0159 assert( type3 == type );
0160 }
0161 }
0162
0163 void test_MaskString()
0164 {
0165 unsigned mask = CSG::Mask(CSG_SPHERE) | CSG::Mask(CSG_UNION) ;
0166 std::cout << CSG::MaskString(mask) << std::endl ;
0167
0168 unsigned typemask = 0 ;
0169
0170 for(unsigned i=0 ; i < 32 ; i++)
0171 {
0172 OpticksCSG_t type = (OpticksCSG_t)CSG::TypeFromOffsetType(i) ;
0173 typemask |= CSG::Mask(type);
0174
0175 const char* name = CSG::Name(type) ;
0176 if( name == nullptr ) continue ;
0177
0178 std::cout
0179 << " i " << std::setw(3) << i
0180 << " type " << std::setw(3) << type
0181 << " CSG::Name(type) " << std::setw(20) << CSG::Name(type)
0182 << " typemask " << std::setw(10) << typemask
0183 << " CSG::MaskString(typemask) " << CSG::MaskString(typemask)
0184 << std::endl
0185 ;
0186
0187 }
0188
0189
0190 }
0191
0192
0193
0194 int main(int argc, char** argv)
0195 {
0196
0197 test_type();
0198 test_HintCode();
0199 test_TypeMask();
0200 test_OffsetType();
0201 test_MaskString();
0202
0203 return 0 ;
0204 }
0205