Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:14

0001 // name=OpticksCSG_test ; gcc $name.cc -std=c++11 -lstdc++ -I.. -o /tmp/$name && /tmp/$name
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     // UID
0037     // 000  ___ 
0038     // 001  __D
0039     // 010  _I_ 
0040     // 011  _ID
0041     // 100  U__ 
0042     // 101  U_D
0043     // 110  UI_
0044     // 111  UID
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