Blame libfreerdp/primitives/test/prim_test.c

Packit Service fa4841
/* prim_test.c
Packit Service fa4841
 * vi:ts=4 sw=4
Packit Service fa4841
 *
Packit Service fa4841
 * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
Packit Service fa4841
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
Packit Service fa4841
 * not use this file except in compliance with the License. You may obtain
Packit Service fa4841
 * a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
Packit Service fa4841
 * Unless required by applicable law or agreed to in writing, software
Packit Service fa4841
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit Service fa4841
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
Packit Service fa4841
 * or implied. See the License for the specific language governing
Packit Service fa4841
 * permissions and limitations under the License.
Packit Service fa4841
 */
Packit Service fa4841
Packit Service fa4841
#ifdef HAVE_CONFIG_H
Packit Service fa4841
#include "config.h"
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
#include "prim_test.h"
Packit Service fa4841
Packit Service fa4841
#ifndef _WIN32
Packit Service fa4841
#include <fcntl.h>
Packit Service fa4841
#include <sys/types.h>
Packit Service fa4841
#include <sys/stat.h>
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
#include <winpr/sysinfo.h>
Packit Service fa4841
#include <winpr/platform.h>
Packit Service fa4841
#include <winpr/crypto.h>
Packit Service fa4841
Packit Service fa4841
#ifdef HAVE_UNISTD_H
Packit Service fa4841
#include <unistd.h>
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
primitives_t* generic = NULL;
Packit Service fa4841
primitives_t* optimized = NULL;
Packit Service fa4841
BOOL g_TestPrimitivesPerformance = FALSE;
Packit Service fa4841
UINT32 g_Iterations = 1000;
Packit Service fa4841
Packit Service fa4841
int test_sizes[] = { 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 };
Packit Service fa4841
Packit Service fa4841
/* ------------------------------------------------------------------------- */
Packit Service fa4841
Packit Service fa4841
#ifdef _WIN32
Packit Service fa4841
float _delta_time(const struct timespec* t0, const struct timespec* t1)
Packit Service fa4841
{
Packit Service fa4841
	return 0.0f;
Packit Service fa4841
}
Packit Service fa4841
#else
Packit Service fa4841
float _delta_time(const struct timespec* t0, const struct timespec* t1)
Packit Service fa4841
{
Packit Service fa4841
	INT64 secs = (INT64)(t1->tv_sec) - (INT64)(t0->tv_sec);
Packit Service fa4841
	long nsecs = t1->tv_nsec - t0->tv_nsec;
Packit Service fa4841
	double retval;
Packit Service fa4841
Packit Service fa4841
	if (nsecs < 0)
Packit Service fa4841
	{
Packit Service fa4841
		--secs;
Packit Service fa4841
		nsecs += 1000000000;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	retval = (double)secs + (double)nsecs / (double)1000000000.0;
Packit Service fa4841
	return (retval < 0.0) ? 0.0 : (float)retval;
Packit Service fa4841
}
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
/* ------------------------------------------------------------------------- */
Packit Service fa4841
void _floatprint(float t, char* output)
Packit Service fa4841
{
Packit Service fa4841
	/* I don't want to link against -lm, so avoid log,exp,... */
Packit Service fa4841
	float f = 10.0;
Packit Service fa4841
	int i;
Packit Service fa4841
Packit Service fa4841
	while (t > f)
Packit Service fa4841
		f *= 10.0;
Packit Service fa4841
Packit Service fa4841
	f /= 1000.0;
Packit Service fa4841
	i = ((int)(t / f + 0.5)) * (int)f;
Packit Service fa4841
Packit Service fa4841
	if (t < 0.0)
Packit Service fa4841
		sprintf(output, "%f", t);
Packit Service fa4841
	else if (i == 0)
Packit Service fa4841
		sprintf(output, "%d", (int)(t + 0.5));
Packit Service fa4841
	else if (t < 1e+3)
Packit Service fa4841
		sprintf(output, "%3d", i);
Packit Service fa4841
	else if (t < 1e+6)
Packit Service fa4841
		sprintf(output, "%3d,%03d", i / 1000, i % 1000);
Packit Service fa4841
	else if (t < 1e+9)
Packit Service fa4841
		sprintf(output, "%3d,%03d,000", i / 1000000, (i % 1000000) / 1000);
Packit Service fa4841
	else if (t < 1e+12)
Packit Service fa4841
		sprintf(output, "%3d,%03d,000,000", i / 1000000000, (i % 1000000000) / 1000000);
Packit Service fa4841
	else
Packit Service fa4841
		sprintf(output, "%f", t);
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
void prim_test_setup(BOOL performance)
Packit Service fa4841
{
Packit Service fa4841
	generic = primitives_get_generic();
Packit Service fa4841
	optimized = primitives_get();
Packit Service fa4841
	g_TestPrimitivesPerformance = performance;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
BOOL speed_test(const char* name, const char* dsc, UINT32 iterations, pstatus_t (*generic)(),
Packit Service fa4841
                pstatus_t (*optimised)(), ...)
Packit Service fa4841
{
Packit Service fa4841
	UINT32 i;
Packit Service fa4841
Packit Service fa4841
	if (!name || !generic || !optimised || (iterations == 0))
Packit Service fa4841
		return FALSE;
Packit Service fa4841
Packit Service fa4841
	for (i = 0; i < iterations; i++)
Packit Service fa4841
	{
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	return TRUE;
Packit Service fa4841
}