static int TestBadActions( void ) { PortAudioStream *stream = NULL; PaError result; PaQaData myData; /* Setup data for synthesis thread. */ myData.framesLeft = (unsigned long) (SAMPLE_RATE * 100); /* 100 seconds */ myData.numChannels = 1; myData.mode = MODE_OUTPUT; /* Default output. */ EXPECT( "TestBadActions", ((result = Pa_OpenStream( &stream, paNoDevice, 0, paFloat32, NULL, Pa_GetDefaultOutputDeviceID(), 2, paFloat32, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, NUM_BUFFERS, paClipOff, QaCallback, &myData ) ) == 0) ); HOPEFOR( "start", ((result = Pa_StartStream( NULL )) == paBadStreamPtr) ); HOPEFOR( "stop", ((result = Pa_StopStream( NULL )) == paBadStreamPtr) ); HOPEFOR( "active?", ((result = Pa_StreamActive( NULL )) == paBadStreamPtr) ); HOPEFOR( "close", ((result = Pa_CloseStream( NULL )) == paBadStreamPtr) ); HOPEFOR( "time?", ((result = (PaError)Pa_StreamTime( NULL )) != 0) ); HOPEFOR( "CPULoad?", ((result = (PaError)Pa_GetCPULoad( NULL )) != 0) ); error: if( stream != NULL ) Pa_CloseStream( stream ); return result; }
/*-----------------------------------------------------------------------------------------*/ static int TestBadActions( void ) { PaStream* stream = NULL; PaError result; PaQaData myData; PaStreamParameters opp; /* Setup data for synthesis thread. */ myData.framesLeft = (unsigned long)(SAMPLE_RATE * 100); /* 100 seconds */ myData.numChannels = 1; myData.mode = MODE_OUTPUT; opp.device = Pa_GetDefaultOutputDevice(); /* Default output. */ opp.channelCount = 2; /* Stereo output. */ opp.hostApiSpecificStreamInfo = NULL; opp.sampleFormat = paFloat32; opp.suggestedLatency = Pa_GetDeviceInfo(opp.device)->defaultLowOutputLatency; HOPEFOR(((result = Pa_OpenStream(&stream, NULL, /* Take NULL as input parame- */ &opp, /* ters, meaning try only output. */ SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff, QaCallback, &myData )) == paNoError)); HOPEFOR(((result = Pa_StartStream(NULL)) == paBadStreamPtr)); HOPEFOR(((result = Pa_StopStream(NULL)) == paBadStreamPtr)); HOPEFOR(((result = Pa_IsStreamStopped(NULL)) == paBadStreamPtr)); HOPEFOR(((result = Pa_IsStreamActive(NULL)) == paBadStreamPtr)); HOPEFOR(((result = Pa_CloseStream(NULL)) == paBadStreamPtr)); HOPEFOR(((result = Pa_SetStreamFinishedCallback(NULL, NULL)) == paBadStreamPtr)); HOPEFOR(((result = Pa_GetStreamInfo(NULL)) == NULL)); HOPEFOR(((result = Pa_GetStreamTime(NULL)) == 0.0)); HOPEFOR(((result = Pa_GetStreamCpuLoad(NULL)) == 0.0)); HOPEFOR(((result = Pa_ReadStream(NULL, NULL, 0)) == paBadStreamPtr)); HOPEFOR(((result = Pa_WriteStream(NULL, NULL, 0)) == paBadStreamPtr)); /** @todo test Pa_GetStreamReadAvailable and Pa_GetStreamWriteAvailable */ if (stream != NULL) Pa_CloseStream(stream); return result; }
/*-------------------------------------------------------------------------------------------------*/ static int TestBadOpens( void ) { PaStream* stream = NULL; PaError result; PaQaData myData; PaStreamParameters ipp, opp; /* Setup data for synthesis thread. */ myData.framesLeft = (unsigned long) (SAMPLE_RATE * 100); /* 100 seconds */ myData.numChannels = 1; myData.mode = MODE_OUTPUT; /*----------------------------- No devices specified: */ ipp.device = opp.device = paNoDevice; ipp.channelCount = opp.channelCount = 0; /* Also no channels. */ ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; ipp.sampleFormat = opp.sampleFormat = paFloat32; /* Take the low latency of the default device for all subsequent tests. */ ipp.suggestedLatency = Pa_GetDeviceInfo(Pa_GetDefaultInputDevice())->defaultLowInputLatency; opp.suggestedLatency = Pa_GetDeviceInfo(Pa_GetDefaultOutputDevice())->defaultLowOutputLatency; HOPEFOR(((result = Pa_OpenStream(&stream, &ipp, &opp, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff, QaCallback, &myData )) == paInvalidDevice)); /*----------------------------- No devices specified #2: */ HOPEFOR(((result = Pa_OpenStream(&stream, NULL, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff, QaCallback, &myData )) == paInvalidDevice)); /*----------------------------- Out of range input device specified: */ ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; ipp.sampleFormat = opp.sampleFormat = paFloat32; ipp.channelCount = 0; ipp.device = Pa_GetDeviceCount(); /* And no output device, and no channels. */ opp.channelCount = 0; opp.device = paNoDevice; HOPEFOR(((result = Pa_OpenStream(&stream, &ipp, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff, QaCallback, &myData )) == paInvalidDevice)); /*----------------------------- Out of range output device specified: */ ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; ipp.sampleFormat = opp.sampleFormat = paFloat32; ipp.channelCount = 0; ipp.device = paNoDevice; /* And no input device, and no channels. */ opp.channelCount = 0; opp.device = Pa_GetDeviceCount(); HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff, QaCallback, &myData )) == paInvalidDevice)); /*----------------------------- Zero input channels: */ ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; ipp.sampleFormat = opp.sampleFormat = paFloat32; ipp.channelCount = 0; ipp.device = Pa_GetDefaultInputDevice(); opp.channelCount = 0; opp.device = paNoDevice; /* And no output device, and no output channels. */ HOPEFOR(((result = Pa_OpenStream(&stream, &ipp, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff, QaCallback, &myData )) == paInvalidChannelCount)); /*----------------------------- Zero output channels: */ ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; ipp.sampleFormat = opp.sampleFormat = paFloat32; ipp.channelCount = 0; ipp.device = paNoDevice; /* And no input device, and no input channels. */ opp.channelCount = 0; opp.device = Pa_GetDefaultOutputDevice(); HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff, QaCallback, &myData )) == paInvalidChannelCount)); /*----------------------------- Nonzero input and output channels but no output device: */ ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; ipp.sampleFormat = opp.sampleFormat = paFloat32; ipp.channelCount = 2; ipp.device = Pa_GetDefaultInputDevice(); /* Both stereo. */ opp.channelCount = 2; opp.device = paNoDevice; HOPEFOR(((result = Pa_OpenStream(&stream, &ipp, &opp, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff, QaCallback, &myData )) == paInvalidDevice)); /*----------------------------- Nonzero input and output channels but no input device: */ ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; ipp.sampleFormat = opp.sampleFormat = paFloat32; ipp.channelCount = 2; ipp.device = paNoDevice; opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); HOPEFOR(((result = Pa_OpenStream(&stream, &ipp, &opp, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff, QaCallback, &myData )) == paInvalidDevice)); /*----------------------------- NULL stream pointer: */ ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; ipp.sampleFormat = opp.sampleFormat = paFloat32; ipp.channelCount = 0; ipp.device = paNoDevice; /* Output is more likely than input. */ opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); /* Only 2 output channels. */ HOPEFOR(((result = Pa_OpenStream(NULL, &ipp, &opp, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff, QaCallback, &myData )) == paBadStreamPtr)); /*----------------------------- Low sample rate: */ ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; ipp.sampleFormat = opp.sampleFormat = paFloat32; ipp.channelCount = 0; ipp.device = paNoDevice; opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, 1.0, FRAMES_PER_BUFFER, /* 1 cycle per second (1 Hz) is too low. */ paClipOff, QaCallback, &myData )) == paInvalidSampleRate)); /*----------------------------- High sample rate: */ ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; ipp.sampleFormat = opp.sampleFormat = paFloat32; ipp.channelCount = 0; ipp.device = paNoDevice; opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, 10000000.0, FRAMES_PER_BUFFER, /* 10^6 cycles per second (10 MHz) is too high. */ paClipOff, QaCallback, &myData )) == paInvalidSampleRate)); /*----------------------------- NULL callback: */ /* NULL callback is valid in V19 -- it means use blocking read/write stream ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; ipp.sampleFormat = opp.sampleFormat = paFloat32; ipp.channelCount = 0; ipp.device = paNoDevice; opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff, NULL, &myData )) == paNullCallback)); */ /*----------------------------- Bad flag: */ ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; ipp.sampleFormat = opp.sampleFormat = paFloat32; ipp.channelCount = 0; ipp.device = paNoDevice; opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, SAMPLE_RATE, FRAMES_PER_BUFFER, 255, /* Is 8 maybe legal V19 API? */ QaCallback, &myData )) == paInvalidFlag)); /*----------------------------- using input device as output device: */ if( FindInputOnlyDevice() != paNoDevice ) { ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; ipp.sampleFormat = opp.sampleFormat = paFloat32; ipp.channelCount = 0; ipp.device = paNoDevice; /* And no input device, and no channels. */ opp.channelCount = 2; opp.device = FindInputOnlyDevice(); HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff, QaCallback, &myData )) == paInvalidChannelCount)); } /*----------------------------- using output device as input device: */ if( FindOutputOnlyDevice() != paNoDevice ) { ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; ipp.sampleFormat = opp.sampleFormat = paFloat32; ipp.channelCount = 2; ipp.device = FindOutputOnlyDevice(); opp.channelCount = 0; opp.device = paNoDevice; /* And no output device, and no channels. */ HOPEFOR(((result = Pa_OpenStream(&stream, &ipp, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff, QaCallback, &myData )) == paInvalidChannelCount)); } if( stream != NULL ) Pa_CloseStream( stream ); return result; }
static int TestBadOpens( void ) { PortAudioStream *stream = NULL; PaError result; PaQaData myData; /* Setup data for synthesis thread. */ myData.framesLeft = (unsigned long) (SAMPLE_RATE * 100); /* 100 seconds */ myData.numChannels = 1; myData.mode = MODE_OUTPUT; HOPEFOR( "No devices specified.",( (result = Pa_OpenStream( &stream, paNoDevice, 0, paFloat32, NULL, paNoDevice, 0, paFloat32, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, NUM_BUFFERS, paClipOff, QaCallback, &myData ) ) == paInvalidDeviceId) ); HOPEFOR( "Out of range input device specified.",( (result = Pa_OpenStream( &stream, Pa_CountDevices(), 0, paFloat32, NULL, paNoDevice, 0, paFloat32, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, NUM_BUFFERS, paClipOff, QaCallback, &myData ) ) == paInvalidDeviceId) ); HOPEFOR( "Out of range output device specified.",( (result = Pa_OpenStream( &stream, paNoDevice, 0, paFloat32, NULL, Pa_CountDevices(), 0, paFloat32, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, NUM_BUFFERS, paClipOff, QaCallback, &myData ) ) == paInvalidDeviceId) ); HOPEFOR( "Zero input channels.",( (result = Pa_OpenStream( &stream, Pa_GetDefaultInputDeviceID(), 0, paFloat32, NULL, paNoDevice, 0, paFloat32, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, NUM_BUFFERS, paClipOff, QaCallback, &myData ) ) == paInvalidChannelCount) ); HOPEFOR( "Zero output channels.",( (result = Pa_OpenStream( &stream, paNoDevice, 0, paFloat32, NULL, Pa_GetDefaultOutputDeviceID(), 0, paFloat32, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, NUM_BUFFERS, paClipOff, QaCallback, &myData ) ) == paInvalidChannelCount) ); HOPEFOR( "Nonzero input channels but no device.",( (result = Pa_OpenStream( &stream, Pa_GetDefaultInputDeviceID(), 2, paFloat32, NULL, paNoDevice, 2, paFloat32, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, NUM_BUFFERS, paClipOff, QaCallback, &myData ) ) == paInvalidChannelCount) ); HOPEFOR( "Nonzero output channels but no device.",( (result = Pa_OpenStream( &stream, paNoDevice, 2, paFloat32, NULL, Pa_GetDefaultOutputDeviceID(), 2, paFloat32, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, NUM_BUFFERS, paClipOff, QaCallback, &myData ) ) == paInvalidChannelCount) ); HOPEFOR( "NULL stream pointer.",( (result = Pa_OpenStream( NULL, paNoDevice, 0, paFloat32, NULL, Pa_GetDefaultOutputDeviceID(), 2, paFloat32, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, NUM_BUFFERS, paClipOff, QaCallback, &myData ) ) == paBadStreamPtr) ); HOPEFOR( "Low sample rate.",( (result = Pa_OpenStream( &stream, paNoDevice, 0, paFloat32, NULL, Pa_GetDefaultOutputDeviceID(), 2, paFloat32, NULL, 1.0, FRAMES_PER_BUFFER, NUM_BUFFERS, paClipOff, QaCallback, &myData ) ) == paInvalidSampleRate) ); HOPEFOR( "High sample rate.",( (result = Pa_OpenStream( &stream, paNoDevice, 0, paFloat32, NULL, Pa_GetDefaultOutputDeviceID(), 2, paFloat32, NULL, 10000000.0, FRAMES_PER_BUFFER, NUM_BUFFERS, paClipOff, QaCallback, &myData ) ) == paInvalidSampleRate) ); HOPEFOR( "NULL callback.",( (result = Pa_OpenStream( &stream, paNoDevice, 0, paFloat32, NULL, Pa_GetDefaultOutputDeviceID(), 2, paFloat32, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, NUM_BUFFERS, paClipOff, NULL, &myData ) ) == paNullCallback) ); HOPEFOR( "Bad flag.",( (result = Pa_OpenStream( &stream, paNoDevice, 0, paFloat32, NULL, Pa_GetDefaultOutputDeviceID(), 2, paFloat32, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, NUM_BUFFERS, (1<<3), QaCallback, &myData ) ) == paInvalidFlag) ); #if 1 /* FIXME - this is legal for some implementations. */ HOPEFOR( "Use input device as output device.",( (result = Pa_OpenStream( &stream, paNoDevice, 0, paFloat32, NULL, Pa_GetDefaultInputDeviceID(), 2, paFloat32, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, NUM_BUFFERS, paClipOff, QaCallback, &myData ) ) == paInvalidDeviceId) ); HOPEFOR( "Use output device as input device.",( (result = Pa_OpenStream( &stream, Pa_GetDefaultOutputDeviceID(), 2, paFloat32, NULL, paNoDevice, 0, paFloat32, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, NUM_BUFFERS, paClipOff, QaCallback, &myData ) ) == paInvalidDeviceId) ); #endif if( stream != NULL ) Pa_CloseStream( stream ); return result; }