Blame src/ctests/case1.c

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