Blame test/mtdev-matching.c

Packit 2663c2
/*****************************************************************************
Packit 2663c2
 *
Packit 2663c2
 * mtdev - Multitouch Protocol Translation Library (MIT license)
Packit 2663c2
 *
Packit 2663c2
 * Copyright (C) 2010 Henrik Rydberg <rydberg@euromail.se>
Packit 2663c2
 * Copyright (C) 2010 Canonical Ltd.
Packit 2663c2
 *
Packit 2663c2
 * Permission is hereby granted, free of charge, to any person obtaining a
Packit 2663c2
 * copy of this software and associated documentation files (the "Software"),
Packit 2663c2
 * to deal in the Software without restriction, including without limitation
Packit 2663c2
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
Packit 2663c2
 * and/or sell copies of the Software, and to permit persons to whom the
Packit 2663c2
 * Software is furnished to do so, subject to the following conditions:
Packit 2663c2
 *
Packit 2663c2
 * The above copyright notice and this permission notice (including the next
Packit 2663c2
 * paragraph) shall be included in all copies or substantial portions of the
Packit 2663c2
 * Software.
Packit 2663c2
 *
Packit 2663c2
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Packit 2663c2
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Packit 2663c2
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
Packit 2663c2
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Packit 2663c2
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Packit 2663c2
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Packit 2663c2
 * DEALINGS IN THE SOFTWARE.
Packit 2663c2
 *
Packit 2663c2
 ****************************************************************************/
Packit 2663c2
Packit 2663c2
#include <src/match.h>
Packit 2663c2
#include <stdio.h>
Packit 2663c2
#include <time.h>
Packit 2663c2
Packit 2663c2
#define ITS 4000000
Packit 2663c2
const int n1 = 4;
Packit 2663c2
const int n2 = 4;
Packit 2663c2
Packit 2663c2
static void test1()
Packit 2663c2
{
Packit 2663c2
	int A[] = {
Packit 2663c2
		1013,
Packit 2663c2
		3030660,
Packit 2663c2
		3559354,
Packit 2663c2
		12505925,
Packit 2663c2
		19008450,
Packit 2663c2
		6946421,
Packit 2663c2
		6118613,
Packit 2663c2
		698020,
Packit 2663c2
		3021800,
Packit 2663c2
		1017,
Packit 2663c2
		37573,
Packit 2663c2
		3242018,
Packit 2663c2
		8152794,
Packit 2663c2
		1266053,
Packit 2663c2
		942941,
Packit 2663c2
		462820,
Packit 2663c2
	};
Packit 2663c2
	int index[DIM_FINGER], i;
Packit 2663c2
	mtdev_match(index, A, 4, 4);
Packit 2663c2
	for (i = 0; i < 4; i++)
Packit 2663c2
		printf("match[%d] = %d\n", i, index[i]);
Packit 2663c2
}
Packit 2663c2
Packit 2663c2
static void test2()
Packit 2663c2
{
Packit 2663c2
	int A[] = {
Packit 2663c2
		0,
Packit 2663c2
		4534330,
Packit 2663c2
		22653552,
Packit 2663c2
		12252500,
Packit 2663c2
		685352,
Packit 2663c2
		4534330,
Packit 2663c2
		0,
Packit 2663c2
		9619317,
Packit 2663c2
		28409530,
Packit 2663c2
		6710170,
Packit 2663c2
		22653552,
Packit 2663c2
		9619317,
Packit 2663c2
		0,
Packit 2663c2
		47015292,
Packit 2663c2
		29788572,
Packit 2663c2
		2809040,
Packit 2663c2
		10428866,
Packit 2663c2
		38615920,
Packit 2663c2
		17732500,
Packit 2663c2
		719528,
Packit 2663c2
		12113945,
Packit 2663c2
		28196220,
Packit 2663c2
		46778656,
Packit 2663c2
		405,
Packit 2663c2
		14175493,
Packit 2663c2
	};
Packit 2663c2
	int index[DIM_FINGER], i;
Packit 2663c2
	mtdev_match(index, A, 5, 5);
Packit 2663c2
	for (i = 0; i < 5; i++)
Packit 2663c2
		printf("match[%d] = %d\n", i, index[i]);
Packit 2663c2
}
Packit 2663c2
Packit 2663c2
static void speed1()
Packit 2663c2
{
Packit 2663c2
	/* column-by-column matrix */
Packit 2663c2
	int A[DIM2_FINGER];
Packit 2663c2
	int x1[DIM_FINGER] = { 1, 5, 2, 3, 4, 5, 6, 7, 8 };
Packit 2663c2
	int y1[DIM_FINGER] = { 1, 5, 2, 3, 4, 6, 6, 7, 8 };
Packit 2663c2
	int x2[DIM_FINGER] = { 1, 3, 2, 4, 5, 6, 7, 8 };
Packit 2663c2
	int y2[DIM_FINGER] = { 1, 3, 2, 4, 5, 6, 7, 8 };
Packit 2663c2
	int index[DIM_FINGER];
Packit 2663c2
	int i, j, k;
Packit 2663c2
Packit 2663c2
	clock_t t1 = clock();
Packit 2663c2
	for (k = 0; k < ITS; k++) {
Packit 2663c2
		for (i = 0; i < n1; i++) {
Packit 2663c2
			for (j = 0; j < n2; j++) {
Packit 2663c2
				A[i + n1 * j] =
Packit 2663c2
					(x1[i] - x2[j]) * (x1[i] - x2[j]) +
Packit 2663c2
					(y1[i] - y2[j]) * (y1[i] - y2[j]);
Packit 2663c2
			}
Packit 2663c2
		}
Packit 2663c2
		mtdev_match(index, A, n1, n2);
Packit 2663c2
	}
Packit 2663c2
	clock_t t2 = clock();
Packit 2663c2
Packit 2663c2
	printf("%lf matches per second\n",
Packit 2663c2
	       ITS * ((float)CLOCKS_PER_SEC / (t2 - t1)));
Packit 2663c2
Packit 2663c2
	for (i = 0; i < n1; i++)
Packit 2663c2
		printf("match[%d] = %d\n", i, index[i]);
Packit 2663c2
Packit 2663c2
}
Packit 2663c2
Packit 2663c2
static void speed2()
Packit 2663c2
{
Packit 2663c2
	struct trk_coord p1[] = {
Packit 2663c2
		{ 1, 1 },
Packit 2663c2
		{ 5, 5 },
Packit 2663c2
		{ 2, 2 },
Packit 2663c2
		{ 3, 3 },
Packit 2663c2
		{ 4, 4 },
Packit 2663c2
	};
Packit 2663c2
	struct trk_coord p2[] = {
Packit 2663c2
		{ 1, 1 },
Packit 2663c2
		{ 3, 3 },
Packit 2663c2
		{ 2, 2 },
Packit 2663c2
		{ 4, 4 },
Packit 2663c2
		{ 5, 5 },
Packit 2663c2
	};
Packit 2663c2
	const unsigned char *p;
Packit 2663c2
	int i;
Packit 2663c2
Packit 2663c2
	clock_t t1 = clock();
Packit 2663c2
	for (i = 0; i < ITS; i++)
Packit 2663c2
		p = mtdev_match_four(p1, n1, p2, n2);
Packit 2663c2
	clock_t t2 = clock();
Packit 2663c2
Packit 2663c2
	printf("%lf matches per second\n",
Packit 2663c2
	       ITS * ((float)CLOCKS_PER_SEC / (t2 - t1)));
Packit 2663c2
Packit 2663c2
	for (i = 0; i < n2; i++)
Packit 2663c2
		printf("match[%d] = %d\n", i, p[i]);
Packit 2663c2
Packit 2663c2
}
Packit 2663c2
Packit 2663c2
int main(int argc, char *argv[])
Packit 2663c2
{
Packit 2663c2
	printf("test1\n");
Packit 2663c2
	test1();
Packit 2663c2
	printf("test2\n");
Packit 2663c2
	test2();
Packit 2663c2
	printf("speed1\n");
Packit 2663c2
	speed1();
Packit 2663c2
	printf("speed2\n");
Packit 2663c2
	speed2();
Packit 2663c2
	printf("done\n");
Packit 2663c2
	return 0;
Packit 2663c2
}