/*
 * Copyright 2022 Bjarki Arge Andreasen
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/ztest.h>
#include <zephyr/drivers/rtc.h>
#include <time.h>

ZTEST(rtc_api_helpers, test_validate_rtc_time_compat_with_tm)
{
	zassert(offsetof(struct rtc_time, tm_sec) == offsetof(struct tm, tm_sec),
		"Offset of tm_sec in struct rtc_time does not match struct tm");

	zassert(offsetof(struct rtc_time, tm_min) == offsetof(struct tm, tm_min),
		"Offset of tm_min in struct rtc_time does not match struct tm");

	zassert(offsetof(struct rtc_time, tm_hour) == offsetof(struct tm, tm_hour),
		"Offset of tm_hour in struct rtc_time does not match struct tm");

	zassert(offsetof(struct rtc_time, tm_mday) == offsetof(struct tm, tm_mday),
		"Offset of tm_mday in struct rtc_time does not match struct tm");

	zassert(offsetof(struct rtc_time, tm_mon) == offsetof(struct tm, tm_mon),
		"Offset of tm_mon in struct rtc_time does not match struct tm");

	zassert(offsetof(struct rtc_time, tm_year) == offsetof(struct tm, tm_year),
		"Offset of tm_year in struct rtc_time does not match struct tm");

	zassert(offsetof(struct rtc_time, tm_wday) == offsetof(struct tm, tm_wday),
		"Offset of tm_wday in struct rtc_time does not match struct tm");

	zassert(offsetof(struct rtc_time, tm_yday) == offsetof(struct tm, tm_yday),
		"Offset of tm_yday in struct rtc_time does not match struct tm");

	zassert(offsetof(struct rtc_time, tm_isdst) == offsetof(struct tm, tm_isdst),
		"Offset of tm_isdts in struct rtc_time does not match struct tm");
}

ZTEST(rtc_api_helpers, test_validate_rtc_time_to_tm)
{
	struct rtc_time rtc_datetime;
	struct tm *datetime = NULL;

	datetime = rtc_time_to_tm(&rtc_datetime);

	zassert(((struct tm *)&rtc_datetime) == datetime, "Incorrect typecast");
}
