#include <prjxray/xilinx/xc7series/frame_address.h>

#include <gtest/gtest.h>

namespace xc7series = prjxray::xilinx::xc7series;

TEST(FrameAddressTest, YamlEncode) {
	xc7series::FrameAddress address(xc7series::BlockType::BLOCK_RAM, false,
	                                10, 0, 5);

	YAML::Node node(address);

	EXPECT_EQ(node.Tag(), "xilinx/xc7series/frame_address");
	EXPECT_EQ(node["block_type"].as<std::string>(), "BLOCK_RAM");
	EXPECT_EQ(node["row_half"].as<std::string>(), "top");
	EXPECT_EQ(node["row"].as<std::string>(), "10");
	EXPECT_EQ(node["column"].as<std::string>(), "0");
	EXPECT_EQ(node["minor"].as<std::string>(), "5");
}

TEST(FrameAddressTest, YamlDecode) {
	YAML::Node node;
	node.SetTag("xilinx/xc7series/frame_address");
	node["block_type"] = "BLOCK_RAM";
	node["row_half"] = "bottom";
	node["row"] = "0";
	node["column"] = "5";
	node["minor"] = "11";

	xc7series::FrameAddress address = node.as<xc7series::FrameAddress>();
	EXPECT_EQ(address.block_type(), xc7series::BlockType::BLOCK_RAM);
	EXPECT_TRUE(address.is_bottom_half_rows());
	EXPECT_EQ(address.row(), 0);
	EXPECT_EQ(address.column(), 5);
	EXPECT_EQ(address.minor(), 11);
}
