Blame src/functional/string_memcpy.c

Szabolcs Nagy 27d6fe
#include <string.h>
Szabolcs Nagy 27d6fe
#include <stdlib.h>
Szabolcs Nagy 27d6fe
#include <stdint.h>
Szabolcs Nagy 27d6fe
#include "test.h"
Szabolcs Nagy 27d6fe
Szabolcs Nagy 27d6fe
static char buf[512];
Szabolcs Nagy 27d6fe
Szabolcs Nagy 27d6fe
static void *(*volatile pmemcpy)(void *restrict, const void *restrict, size_t);
Szabolcs Nagy 27d6fe
Szabolcs Nagy 27d6fe
static void *aligned(void *p) {
Szabolcs Nagy 27d6fe
	return (void*)(((uintptr_t)p + 63) & -64U);
Szabolcs Nagy 27d6fe
}
Szabolcs Nagy 27d6fe
Szabolcs Nagy 27d6fe
#define N 80
Szabolcs Nagy 27d6fe
static void test_align(int dalign, int salign, int len)
Szabolcs Nagy 27d6fe
{
Szabolcs Nagy 27d6fe
	char *src = aligned(buf);
Szabolcs Nagy 27d6fe
	char *dst = aligned(buf + 128);
Szabolcs Nagy 27d6fe
	char *want = aligned(buf + 256);
Szabolcs Nagy 27d6fe
	char *p;
Szabolcs Nagy 27d6fe
	int i;
Szabolcs Nagy 27d6fe
Szabolcs Nagy 27d6fe
	if (salign + len > N || dalign + len > N)
Szabolcs Nagy 27d6fe
		abort();
Szabolcs Nagy 27d6fe
	for (i = 0; i < N; i++) {
Szabolcs Nagy 27d6fe
		src[i] = '#';
Szabolcs Nagy 27d6fe
		dst[i] = want[i] = ' ';
Szabolcs Nagy 27d6fe
	}
Szabolcs Nagy 27d6fe
	for (i = 0; i < len; i++)
Szabolcs Nagy 27d6fe
		src[salign+i] = want[dalign+i] = '0'+i;
Szabolcs Nagy 27d6fe
	p = pmemcpy(dst+dalign, src+salign, len);
Szabolcs Nagy 27d6fe
	if (p != dst+dalign)
Szabolcs Nagy 27d6fe
		t_error("memcpy(%p,...) returned %p\n", dst+dalign, p);
Szabolcs Nagy 27d6fe
	for (i = 0; i < N; i++)
Szabolcs Nagy 27d6fe
		if (dst[i] != want[i]) {
Szabolcs Nagy 27d6fe
			t_error("memcpy(align %d, align %d, %d) failed\n", dalign, salign, len);
Szabolcs Nagy 27d6fe
			t_printf("got : %.*s\n", dalign+len+1, dst);
Szabolcs Nagy 27d6fe
			t_printf("want: %.*s\n", dalign+len+1, want);
Szabolcs Nagy 27d6fe
			break;
Szabolcs Nagy 27d6fe
		}
Szabolcs Nagy 27d6fe
}
Szabolcs Nagy 27d6fe
Szabolcs Nagy 27d6fe
int main(void)
Szabolcs Nagy 27d6fe
{
Szabolcs Nagy 27d6fe
	int i,j,k;
Szabolcs Nagy 27d6fe
Szabolcs Nagy 27d6fe
	pmemcpy = memcpy;
Szabolcs Nagy 27d6fe
Szabolcs Nagy 27d6fe
	for (i = 0; i < 16; i++)
Szabolcs Nagy 27d6fe
		for (j = 0; j < 16; j++)
Szabolcs Nagy 27d6fe
			for (k = 0; k < 64; k++)
Szabolcs Nagy 27d6fe
				test_align(i,j,k);
Szabolcs Nagy 27d6fe
Szabolcs Nagy 27d6fe
	return t_status;
Szabolcs Nagy 27d6fe
}