Code Search for Developers
 
 
  

TestAtomicMessages.c from redshed at Krugle


Show TestAtomicMessages.c syntax highlighted

/****************************************************************************************
	TestAtomicMessages.c $Revision: 18 $
		<http://rentzsch.com/atomicMessages>
	
	Copyright © 1999-2002 Red Shed Software. All rights reserved.
	by Jonathan 'Wolf' Rentzsch (jon at redshed dot net)
	
	************************************************************************************/

#include	"require.h"
#include	"Align.h"
#include	"AtomicMessages.h"

	AtomicMessageElement*
OddFilter(
	AtomicMessageElement	*element,
	AtomicMessageQueue		*queue );

	void
main()
{
	DeclareAlignedVariable( AtomicMessageQueue, queue, kAtomicAlignment );
	AtomicMessage	message = 0xDEADBEEF;
	long			i, data1 = 0xDEADBEEF, data2 = 0xDEADBEEF, data3 = 0xDEADBEEF;
	OSErr			err;
	
	InitializeAtomicMessageQueue( queue );
	
	for( i = 1; i <= 10; ++i ) {
		err = NewAtomicMessage( queue, i, i, i, i );
		RequireNoErr( err );
	}
	//	1, 2, 3, 4, 5, 6, 7, 8, 9, 10
	
	message = PeekAtomicMessage( queue, nil, kNoAtomicMessage, nil, nil, nil );
	RequireEqual( message, 1 );
	message = 0xDEADBEEF;
	//	1, 2, 3, 4, 5, 6, 7, 8, 9, 10
	
	message = PeekAtomicMessage( queue, nil, kNoAtomicMessage, &data1, nil, nil );
	RequireEqual( message, 1 );
	RequireEqual( data1, 1 );
	message = 0xDEADBEEF;
	data1 = 0xDEADBEEF;
	//	1, 2, 3, 4, 5, 6, 7, 8, 9, 10
	
	message = PeekAtomicMessage( queue, nil, kNoAtomicMessage, nil, &data2, nil );
	RequireEqual( message, 1 );
	RequireEqual( data2, 1 );
	message = 0xDEADBEEF;
	data2 = 0xDEADBEEF;
	//	1, 2, 3, 4, 5, 6, 7, 8, 9, 10
	
	message = PeekAtomicMessage( queue, nil, kNoAtomicMessage, nil, nil, &data3 );
	RequireEqual( message, 1 );
	RequireEqual( data3, 1 );
	message = 0xDEADBEEF;
	data3 = 0xDEADBEEF;
	//	1, 2, 3, 4, 5, 6, 7, 8, 9, 10
	
	message = PeekAtomicMessage( queue, nil, kNoAtomicMessage, &data1, &data2, &data3 );
	RequireEqual( message, 1 );
	RequireEqual( data1, 1 );
	RequireEqual( data2, 1 );
	RequireEqual( data3, 1 );
	message = 0xDEADBEEF;
	data1 = 0xDEADBEEF;
	data2 = 0xDEADBEEF;
	data3 = 0xDEADBEEF;
	//	1, 2, 3, 4, 5, 6, 7, 8, 9, 10
	
	message = ReceiveAtomicMessage( queue, nil, kNoAtomicMessage, &data1, &data2, &data3 );
	RequireEqual( message, 1 );
	RequireEqual( data1, 1 );
	RequireEqual( data2, 1 );
	RequireEqual( data3, 1 );
	message = 0xDEADBEEF;
	data1 = 0xDEADBEEF;
	data2 = 0xDEADBEEF;
	data3 = 0xDEADBEEF;
	//	2, 3, 4, 5, 6, 7, 8, 9, 10
	
	message = PeekAtomicMessage( queue, nil, kNoAtomicMessage, &data1, &data2, &data3 );
	RequireEqual( message, 2 );
	RequireEqual( data1, 2 );
	RequireEqual( data2, 2 );
	RequireEqual( data3, 2 );
	message = 0xDEADBEEF;
	data1 = 0xDEADBEEF;
	data2 = 0xDEADBEEF;
	data3 = 0xDEADBEEF;
	//	2, 3, 4, 5, 6, 7, 8, 9, 10
	
	message = ReceiveAtomicMessage( queue, nil, 3, &data1, &data2, &data3 );
	RequireEqual( message, 3 );
	RequireEqual( data1, 3 );
	RequireEqual( data2, 3 );
	RequireEqual( data3, 3 );
	message = 0xDEADBEEF;
	data1 = 0xDEADBEEF;
	data2 = 0xDEADBEEF;
	data3 = 0xDEADBEEF;
	//	2, 4, 5, 6, 7, 8, 9, 10
	
	message = ReceiveAtomicMessage( queue, nil, 3, &data1, &data2, &data3 );
	RequireEqual( message, kNoAtomicMessage );
	RequireEqual( data1, 0xDEADBEEF );
	RequireEqual( data2, 0xDEADBEEF );
	RequireEqual( data3, 0xDEADBEEF );
	message = 0xDEADBEEF;
	//	2, 4, 5, 6, 7, 8, 9, 10
	
	message = PeekAtomicMessage( queue, OddFilter, 0, &data1, &data2, &data3 );
	RequireEqual( message, 5 );
	RequireEqual( data1, 5 );
	RequireEqual( data2, 5 );
	RequireEqual( data3, 5 );
	message = 0xDEADBEEF;
	data1 = 0xDEADBEEF;
	data2 = 0xDEADBEEF;
	data3 = 0xDEADBEEF;
	//	2, 4, 5, 6, 7, 8, 9, 10
	
	message = ReceiveAtomicMessage( queue, OddFilter, 0, &data1, &data2, &data3 );
	RequireEqual( message, 5 );
	RequireEqual( data1, 5 );
	RequireEqual( data2, 5 );
	RequireEqual( data3, 5 );
	message = 0xDEADBEEF;
	data1 = 0xDEADBEEF;
	data2 = 0xDEADBEEF;
	data3 = 0xDEADBEEF;
	//	2, 4, 6, 7, 8, 9, 10
	
	message = ReceiveAtomicMessage( queue, OddFilter, 0, &data1, &data2, &data3 );
	RequireEqual( message, 7 );
	RequireEqual( data1, 7 );
	RequireEqual( data2, 7 );
	RequireEqual( data3, 7 );
	message = 0xDEADBEEF;
	data1 = 0xDEADBEEF;
	data2 = 0xDEADBEEF;
	data3 = 0xDEADBEEF;
	//	2, 4, 6, 8, 9, 10
	
	message = ReceiveAtomicMessage( queue, OddFilter, 0, &data1, &data2, &data3 );
	RequireEqual( message, 9 );
	RequireEqual( data1, 9 );
	RequireEqual( data2, 9 );
	RequireEqual( data3, 9 );
	message = 0xDEADBEEF;
	data1 = 0xDEADBEEF;
	data2 = 0xDEADBEEF;
	data3 = 0xDEADBEEF;
	//	2, 4, 6, 8, 10
	
	message = ReceiveAtomicMessage( queue, OddFilter, 0, &data1, &data2, &data3 );
	RequireEqual( message, kNoAtomicMessage );
	RequireEqual( data1, 0xDEADBEEF );
	RequireEqual( data2, 0xDEADBEEF );
	RequireEqual( data3, 0xDEADBEEF );
	message = 0xDEADBEEF;
	//	2, 4, 6, 8, 10
	
	message = ReceiveAtomicMessage( queue, nil, 10, &data1, &data2, &data3 );
	RequireEqual( message, 10 );
	RequireEqual( data1, 10 );
	RequireEqual( data2, 10 );
	RequireEqual( data3, 10 );
	message = 0xDEADBEEF;
	data1 = 0xDEADBEEF;
	data2 = 0xDEADBEEF;
	data3 = 0xDEADBEEF;
	//	2, 4, 6, 8
	
	message = ReceiveAtomicMessage( queue, nil, 6, &data1, &data2, &data3 );
	RequireEqual( message, 6 );
	RequireEqual( data1, 6 );
	RequireEqual( data2, 6 );
	RequireEqual( data3, 6 );
	message = 0xDEADBEEF;
	data1 = 0xDEADBEEF;
	data2 = 0xDEADBEEF;
	data3 = 0xDEADBEEF;
	//	2, 4, 8
	
	message = ReceiveAtomicMessage( queue, nil, kNoAtomicMessage, &data1, &data2, &data3 );
	RequireEqual( message, 2 );
	RequireEqual( data1, 2 );
	RequireEqual( data2, 2 );
	RequireEqual( data3, 2 );
	message = 0xDEADBEEF;
	data1 = 0xDEADBEEF;
	data2 = 0xDEADBEEF;
	data3 = 0xDEADBEEF;
	//	4, 8
	
	message = ReceiveAtomicMessage( queue, nil, kNoAtomicMessage, &data1, &data2, &data3 );
	RequireEqual( message, 4 );
	RequireEqual( data1, 4 );
	RequireEqual( data2, 4 );
	RequireEqual( data3, 4 );
	message = 0xDEADBEEF;
	data1 = 0xDEADBEEF;
	data2 = 0xDEADBEEF;
	data3 = 0xDEADBEEF;
	//	8
	
	message = ReceiveAtomicMessage( queue, nil, kNoAtomicMessage, &data1, &data2, &data3 );
	RequireEqual( message, 8 );
	RequireEqual( data1, 8 );
	RequireEqual( data2, 8 );
	RequireEqual( data3, 8 );
	message = 0xDEADBEEF;
	data1 = 0xDEADBEEF;
	data2 = 0xDEADBEEF;
	data3 = 0xDEADBEEF;
	//	(empty)
	
	message = ReceiveAtomicMessage( queue, nil, kNoAtomicMessage, &data1, &data2, &data3 );
	RequireEqual( message, kNoAtomicMessage );
	RequireEqual( data1, 0xDEADBEEF );
	RequireEqual( data2, 0xDEADBEEF );
	RequireEqual( data3, 0xDEADBEEF );
	message = 0xDEADBEEF;
	//	(empty)
}

	AtomicMessageElement*
OddFilter(
	AtomicMessageElement	*element,
	AtomicMessageQueue		*queue )
{
	RequirePtrAlign( element, kAtomicAlignment );
	RequirePtrAlign( queue, kAtomicAlignment );
	
	if( element->message % 2 != 0 )
		return( kFilterFoundAtomicMessage );
	else
		return( kFilterNextAtomicMessage );
}



See more files for this project here

redshed

Code for Mac+WebObjects.

Project homepage: http://sourceforge.net/projects/redshed
Programming language(s): C,Java,Objective C
License: other

  MacsBug/
    AtomicMessages.mbug
    AtomicMessages.mbug.r
  AtomicMessages.c
  AtomicMessages.h
  TestAtomicMessages.c