/* main.c - Application main entry point */

/*
 * Copyright (c) 2019 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/zephyr.h>
#include <stddef.h>
#include <ztest.h>

#include <zephyr/settings/settings.h>

#include "ll_settings.h"

ZTEST_SUITE(test_ll_settings, NULL, NULL, NULL, NULL, NULL);

ZTEST(test_ll_settings, test_company_id)
{
	uint16_t cid;
	int err;

	cid = 0x1234;
	err = settings_runtime_set("bt/ctlr/company", &cid, sizeof(cid));
	zassert_equal(err, 0, "Setting Company Id failed");
	zassert_equal(ll_settings_company_id(), cid,
		      "Company Id does not match");

	cid = 0x5678;
	err = settings_runtime_set("bt/ctlr/company", &cid, sizeof(cid));
	zassert_equal(err, 0, "Changing Company Id failed");
	zassert_equal(ll_settings_company_id(), cid,
		      "Company ID does not match");
}

ZTEST(test_ll_settings, test_subversion_number)
{
	uint16_t svn;
	int err;

	svn = 0x1234;
	err = settings_runtime_set("bt/ctlr/subver", &svn, sizeof(svn));
	zassert_equal(err, 0, "Setting Subversion number failed");
	zassert_equal(ll_settings_subversion_number(), svn,
		      "Subversion number does not match");

	svn = 0x5678;
	err = settings_runtime_set("bt/ctlr/subver", &svn, sizeof(svn));
	zassert_equal(err, 0, "Changing Subversion number failed");
	zassert_equal(ll_settings_subversion_number(), svn,
		      "Subversion number does not match");
}
