/*
 * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include "CppUTest/TestHarness.h"
extern "C" {
#include "lib/libc/string.h"
}

#define BUFFER_SIZE	(16)

TEST_GROUP(memcpy) {
	TEST_SETUP() {
		for (int i = 0; i < BUFFER_SIZE; i++) {
			dst[i] = 0;
			src[i] = 0;
		}
	}

	uint8_t dst[BUFFER_SIZE];
	uint8_t src[BUFFER_SIZE];
};

TEST(memcpy, zero_length) {
	POINTERS_EQUAL(dst, memcpy(dst, src, 0));
	MEMCMP_EQUAL(src, dst, sizeof(dst));
}

TEST(memcpy, copy_all) {
	POINTERS_EQUAL(dst, memcpy(dst, src, sizeof(dst)));
	MEMCMP_EQUAL(src, dst, sizeof(dst));
}
