void testSequence(char *seq, size_t len, const char *fmt, Bottle ref, bool testWrite = true) { char err[1024]; printf("\n"); printf("================================================\n"); printf(" READ %s\n", fmt); Bytes b1(seq, len); WireTwiddler tt; tt.configure(fmt, fmt); printf(">>> %s\n", tt.toString().c_str()); Bottle bot; checkTrue(tt.read(bot, b1), "Read failed"); snprintf(err, 1024, "%s: read %s, expected %s", fmt, bot.toString().c_str(), ref.toString().c_str()); checkTrue(bot == ref, err); printf("[1] %s: read %s as expected\n", fmt, bot.toString().c_str()); StringInputStream sis; sis.add(b1); sis.add(b1); WireTwiddlerReader twiddled_input(sis, tt); Route route; bot.clear(); twiddled_input.reset(); ConnectionReader::readFromStream(bot, twiddled_input); snprintf(err, 1024, "%s: read %s, expected %s", fmt, bot.toString().c_str(), ref.toString().c_str()); checkTrue(bot == ref, err); printf("[2] %s: read %s as expected\n", fmt, bot.toString().c_str()); bot.clear(); twiddled_input.reset(); ConnectionReader::readFromStream(bot, twiddled_input); snprintf(err, 1024, "%s: read %s, expected %s", fmt, bot.toString().c_str(), ref.toString().c_str()); checkTrue(bot == ref, err); printf("[3] %s: read %s as expected\n", fmt, bot.toString().c_str()); if (testWrite) { printf("\n"); printf("================================================\n"); printf(" WRITE %s\n", fmt); ManagedBytes output; checkTrue(tt.write(ref, output), "WRITE FAILED"); snprintf(err, 1024, "WRITE MISMATCH, length %zd, expected %zd", output.length(), len); checkTrue(output.length() == len, err); for (size_t i = 0; i < output.length(); i++) { snprintf(err, 1024, "WRITE MISMATCH, at %zd, have [%d:%c] expected [%d:%c]\n", i, output.get()[i], output.get()[i], seq[i], seq[i]); checkTrue(output.get()[i] == seq[i], err); } printf("[4] %s: wrote %s as expected\n", fmt, bot.toString().c_str()); } }
YARP_END_PACK bool PcmWavHeader::parse_from_file(FILE *fp) { size_t result; result = fread(&wavHeader,sizeof(wavHeader),1,fp); result = fread(&wavLength,sizeof(wavLength),1,fp); result = fread(&formatHeader1,sizeof(formatHeader1),1,fp); result = fread(&formatHeader2,sizeof(formatHeader2),1,fp); result = fread(&formatLength,sizeof(formatLength),1,fp); result = fread(&pcm.pcmFormatTag,sizeof(pcm.pcmFormatTag),1,fp); result = fread(&pcm.pcmChannels,sizeof(pcm.pcmChannels),1,fp); result = fread(&pcm.pcmSamplesPerSecond,sizeof(pcm.pcmSamplesPerSecond),1,fp); result = fread(&pcm.pcmBytesPerSecond,sizeof(pcm.pcmBytesPerSecond),1,fp); result = fread(&pcm.pcmBlockAlign,sizeof(pcm.pcmBlockAlign),1,fp); result = fread(&pcm.pcmBitsPerSample,sizeof(pcm.pcmBitsPerSample),1,fp); if (pcm.pcmBitsPerSample!=16) { printf("sorry, lousy wav read code only does 16-bit ints\n"); return false; } //extra bytes in pcm chuck int extra_size = formatLength-sizeof(pcm); pcmExtraData.allocate(extra_size); result = fread(&pcmExtraData,extra_size,1,fp); //extra chuncks result = fread(&dummyHeader,sizeof(dummyHeader),1,fp); while (dummyHeader!=VOCAB4('d','a','t','a')) { result = fread(&dummyLength,sizeof(dummyLength),1,fp); dummyData.clear(); dummyData.allocate(dummyLength); result = fread(&dummyData,dummyLength,1,fp); result = fread(&dummyHeader,sizeof(dummyHeader),1,fp); } dataHeader=dummyHeader; result = fread(&dataLength,sizeof(dataLength),1,fp); YARP_UNUSED(result); return true; }
bool testSequence(char *seq, int len, const char *fmt, Bottle ref, bool testWrite = true) { printf("\n"); printf("================================================\n"); printf(" READ %s\n", fmt); Bytes b1(seq,len); WireTwiddler tt; tt.configure(fmt); printf(">>> %s\n", tt.toString().c_str()); Bottle bot; if (!tt.read(bot,b1)) { fprintf(stderr,"Read failed\n"); return 1; } if (bot!=ref) { printf("%s: read %s, expected %s\n", fmt, bot.toString().c_str(), ref.toString().c_str()); printf("MISMATCH\n"); exit(1); return false; } printf("[1] %s: read %s as expected\n", fmt, bot.toString().c_str()); StringInputStream sis; sis.add(b1); sis.add(b1); WireTwiddlerReader twiddled_input(sis,tt); Route route; StreamConnectionReader reader2; reader2.reset(twiddled_input,NULL,route,0,false); bot.clear(); twiddled_input.reset(); bot.read(reader2); if (bot!=ref) { printf("%s: read %s, expected %s\n", fmt, bot.toString().c_str(), ref.toString().c_str()); printf("MISMATCH\n"); exit(1); return false; } printf("[2] %s: read %s as expected\n", fmt, bot.toString().c_str()); StreamConnectionReader reader3; reader3.reset(twiddled_input,NULL,route,0,false); bot.clear(); twiddled_input.reset(); bot.read(reader3); if (bot!=ref) { printf("%s: read %s, expected %s\n", fmt, bot.toString().c_str(), ref.toString().c_str()); printf("MISMATCH\n"); exit(1); return false; } printf("[3] %s: read %s as expected\n", fmt, bot.toString().c_str()); if (testWrite) { printf("\n"); printf("================================================\n"); printf(" WRITE %s\n", fmt); ManagedBytes output; tt.write(ref,output); if (output.length()!=(size_t)len) { fprintf(stderr,"WRITE MISMATCH, length %d, expected %d\n", (int)output.length(), len); exit(1); return false; } for (size_t i=0; i<output.length(); i++) { if (output.get()[i] != seq[i]) { fprintf(stderr,"WRITE MISMATCH, at %d, have [%d:%c] expected [%d:%c]\n", (int)i, output.get()[i], output.get()[i], seq[i], seq[i]); exit(1); return false; } } printf("[4] %s: wrote %s as expected\n", fmt, bot.toString().c_str()); } return true; }