Blame src/ctests/case1.c

Packit 577717
/* From Dave McNamara at PSRV. Thanks! */
Packit 577717
Packit 577717
/* If you try to add an event that doesn't exist, you get the correct error
Packit 577717
message, yet you get subsequent Seg. Faults when you try to do PAPI_start and
Packit 577717
PAPI_stop. I would expect some bizarre behavior if I had no events added to the
Packit 577717
event set and then tried to PAPI_start but if I had successfully added one
Packit 577717
event, then the 2nd one get an error when I tried to add it, is it possible for
Packit 577717
PAPI_start to work but just count the first event?
Packit 577717
*/
Packit 577717
Packit 577717
#include <stdio.h>
Packit 577717
#include <stdlib.h>
Packit 577717
Packit 577717
#include "papi.h"
Packit 577717
#include "papi_test.h"
Packit 577717
Packit 577717
int
Packit 577717
main( int argc, char **argv )
Packit 577717
{
Packit 577717
  double c, a = 0.999, b = 1.001;
Packit 577717
	int n = 1000;
Packit 577717
	int EventSet = PAPI_NULL;
Packit 577717
	int retval;
Packit 577717
	int i, j = 0;
Packit 577717
	long long g1[2];
Packit 577717
Packit 577717
	tests_quiet( argc, argv );	/* Set TESTS_QUIET variable */
Packit 577717
Packit 577717
	if ( ( retval =
Packit 577717
		   PAPI_library_init( PAPI_VER_CURRENT ) ) != PAPI_VER_CURRENT )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
Packit 577717
Packit 577717
Packit 577717
	if ( ( retval = PAPI_create_eventset( &EventSet ) ) != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
Packit 577717
Packit 577717
	if ( PAPI_query_event( PAPI_L2_TCM ) == PAPI_OK )
Packit 577717
		j++;
Packit 577717
Packit 577717
	if ( j == 1 &&
Packit 577717
		 ( retval = PAPI_add_event( EventSet, PAPI_L2_TCM ) ) != PAPI_OK ) {
Packit 577717
		if ( retval != PAPI_ECNFLCT )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_add_event", retval );
Packit 577717
		j--;				 /* The event was not added */
Packit 577717
	}
Packit 577717
Packit 577717
	i = j;
Packit 577717
	if ( PAPI_query_event( PAPI_L2_DCM ) == PAPI_OK )
Packit 577717
		j++;
Packit 577717
Packit 577717
	if ( j == ( i + 1 ) &&
Packit 577717
		 ( retval = PAPI_add_event( EventSet, PAPI_L2_DCM ) ) != PAPI_OK ) {
Packit 577717
		if ( retval != PAPI_ECNFLCT )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_add_event", retval );
Packit 577717
		j--;				 /* The event was not added */
Packit 577717
	}
Packit 577717
Packit 577717
	if ( j ) {
Packit 577717
		if ( ( retval = PAPI_start( EventSet ) ) != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_start", retval );
Packit 577717
		for ( i = 0; i < n; i++ ) {
Packit 577717
			c = a * b;
Packit 577717
		}
Packit 577717
		if (!TESTS_QUIET) fprintf(stdout,"c=%lf\n",c);
Packit 577717
Packit 577717
		if ( ( retval = PAPI_stop( EventSet, g1 ) ) != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
Packit 577717
	}
Packit 577717
Packit 577717
	test_pass( __FILE__ );
Packit 577717
Packit 577717
	return 0;
Packit 577717
}