| 
							- #include "../src/ChipSym.hpp"
 - #include <iostream>
 - #include <iomanip>
 - #include <map>
 - #include <set>
 - #include <cassert>
 - 
 - int main( int argc, char ** argv )
 - {
 -   std::cout << "Testing chip periods" << std::endl;
 -   ChipSym::NESNoise noise( 0.0f, 1.0f, 44100 );
 -   noise.setPeriod( 2 );
 -   noise.setModeFlag( true );
 - 
 -   for( int i=0; i<5; ++i )
 -     {
 -       // So lets start by testing if 31 gives us 31 and 93 gives us 93
 -       int ct = 0;
 -       noise.setShortLength( ChipSym::NESNoise::SHORT_31 );
 -       unsigned short target = noise.getRegister();
 -       do { ct ++; noise.advanceRegister(); } while( noise.getRegister() != target );
 -       assert( ct == 31 );
 - 
 -       noise.setShortLength( ChipSym::NESNoise::SHORT_93 );
 -       target = noise.getRegister();
 -       ct = 0;
 -       do { ct ++; noise.advanceRegister(); } while( noise.getRegister() != target && ct < 100 );
 -       assert( ct == 93 );
 -     }
 -   
 -   std::map< int, std::pair< unsigned short, int > > resultMap;
 -   std::map< unsigned short, int > sequenceMap;
 -   int sequenceID = 0;
 - 
 -   
 -   for( unsigned short iRegister=1; iRegister < 0x7FFF; iRegister ++ )
 -     {
 -       bool newSeq = false;
 -       noise.setRegister( iRegister );
 -       // step off my initial point into the sequence
 -       while( noise.getRegister() == iRegister ) noise.advanceRegister();
 -       
 -       unsigned short target = noise.getRegister();
 -       bool gotR = false;
 -       int stepC = 0;
 -       
 -       if( sequenceMap.find( noise.getRegister() ) == sequenceMap.end() ) {
 -         sequenceID ++;
 -         newSeq = true;
 -       }
 -       
 -       while( ! gotR )
 -         {
 -           ++stepC;
 -           if( newSeq )
 -             sequenceMap[ noise.getRegister() ] = sequenceID;
 -                     
 -           noise.advanceRegister();
 -           if( noise.getRegister() == target )
 -             {
 -               if( resultMap.find( stepC ) == resultMap.end() )
 -                 {
 -                   resultMap[ stepC ] = std::pair< unsigned short, int >( target, 1 );
 -                 }
 -               else
 -                 resultMap[ stepC ].second ++;
 -               
 -               gotR = true;
 -             }
 -         }
 -     }
 - 
 -   std::cout << "Unique sequence count is " << sequenceID << " " << sequenceMap.size() << "\n";
 - 
 -   // Invert sequenceMap
 -   std::map< int, std::set< unsigned short > > inverseSequenceMap;
 -   for( auto smapKey = sequenceMap.begin(); smapKey != sequenceMap.end(); ++smapKey )
 -     {
 -       inverseSequenceMap[ smapKey->second ].insert( smapKey->first );
 -     }
 - 
 -   std::map< int, int > lenMap;
 -   lenMap[ 93 ] = 0;
 -   lenMap[ 31 ] = 0;
 -   for( auto imapKey = inverseSequenceMap.begin(); imapKey != inverseSequenceMap.end(); ++imapKey )
 -     {
 -         lenMap[ imapKey->second.size() ] ++;
 -     }
 - 
 -   std::cout << "Count[ 93 ] = " << lenMap[ 93 ] << "\nCount[ 31 ] = " << lenMap[ 31 ] << "\n";
 -   
 -   for( auto imapKey = inverseSequenceMap.begin(); imapKey != inverseSequenceMap.end(); ++imapKey )
 -     {
 -       std::cout << "Seq: " << std::setw( 4 ) << std::setfill( ' ' ) << std::setbase( 10 ) << imapKey->first << " Len = " << imapKey->second.size() << " ";
 -       int ct = 0;
 -       for( auto secKey = imapKey->second.begin(); secKey != imapKey->second.end() && ct < 8; ++secKey, ++ct )
 -         {
 -           std::cout << " 0x" << std::setw( 4 ) << std::setbase( 16 ) << std::setfill( '0' ) << *secKey;
 -         }
 -       std::cout << "\n";
 -     }
 - 
 -   // Finally dump the c structure
 -   std::cout << "unsigned short start_for_93s[] = {\n    ";
 -   int ct = 0;
 -   for( auto imapKey = inverseSequenceMap.begin(); imapKey != inverseSequenceMap.end(); ++imapKey, ++ct )
 -     {
 -       if( imapKey->second.size() == 93 )
 -         std::cout << std::setbase( 10 ) <<  *( imapKey->second.begin() ) << ", ";
 -       if( (ct+1) % 15 == 0 )
 -         std::cout << "\n    ";
 -     }
 -   std::cout << " 0 };\n";
 -    
 -   
 - }
 
 
  |