nodes.ixx

nodes

Download source code for Visual Studio 2022 from Github
NodesTest.ixx
#include "pch.h"

//export module nodestest;
import nodes;
import utilitytest;


class QuickUnionTestNodes : public ::testing::Test {
public:
	virtual void SetUp() override {}
	virtual void TearDown() override {}

};



void assertLimits(Nodes& nodes, const int size, int firstIndex, int lastIndex)
{
	nodes.resize(size);
	ASSERT_EQ(nodes.firstIndex(), firstIndex);
	ASSERT_EQ(nodes.lastIndex(), lastIndex);
}


TEST_F(QuickUnionTestNodes, InsertingElementsInto_OneBasedArray)
{
	OneBasedArray oneBasedArray;
	Nodes nodes{ oneBasedArray };
	nodes.resize(2);
	nodes.set(1, 42);
	nodes.set(2, 43);
	int expected[] = { 42, 43 };
	std::vector<int> values = nodes.getAll();
	assert_that(values, expected);
}





TEST_F(QuickUnionTestNodes, InsertingElementsInto_ZeroBasedArray)
{
	ZeroBasedArray zeroBasedArray;
	Nodes nodes{ zeroBasedArray };
	nodes.resize(3);
	nodes.set(0, 42);
	nodes.set(1, 43);
	nodes.set(2, 44);
	int expected[] = { 42, 43, 44 };
	std::vector<int> values = nodes.getAll();
	assert_that(values, expected);
}



TEST_F(QuickUnionTestNodes, testinglimits_ZeroBasedArray)
{
	ZeroBasedArray zeroBasedArray;
	Nodes nodes{ zeroBasedArray };

	assertLimits(nodes, 3, 0, 2);
	assertLimits(nodes, 2, 0, 1);
	assertLimits(nodes, 1, 0, 0);

}

TEST_F(QuickUnionTestNodes, testingInitialize_ZeroBasedArray)
{
	ZeroBasedArray zeroBasedArray;
	Nodes nodes{ zeroBasedArray };
	nodes.resize(10);

	for (int i = nodes.firstIndex(); i <= nodes.lastIndex(); i++)
	{
		nodes[i] = i;
	}

	int expected[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	std::vector<int> values = nodes.getAll();
	assert_that(values, expected);
}


nodes.ixx
#include "pch.h"
#include <vector>

export module nodes:nd;
import :arraytype;

export class Nodes
{
	std::vector<int> m_nodes;

private:
	std::unique_ptr<ArrayType> m_arrayType;

public:


	Nodes(ArrayType& arrayType) :m_arrayType( arrayType.clone() ) { }

	constexpr int get(const int index) const {
		return m_nodes[m_arrayType->at(index)];
	}

	void set(const int index, const int value) {
		m_nodes[m_arrayType->at(index)] = value;
	}
	void resize(const int size)
	{
		m_nodes.resize(size);
	}

	void fillAll(int value = 0)
	{
		for (auto& node : m_nodes)
		{
			node = value;
		}
	}

	constexpr int size() const
	{
		return m_nodes.size();
	}

	int& operator[] (const int index)
	{
		return  m_nodes[m_arrayType->at(index)];
	}

	const std::vector<int>& getAll() { return m_nodes; }

	int firstIndex() const
	{
		return m_arrayType->firstIndex();
	}

	int lastIndex() const
	{
		return m_arrayType->lastIndex (m_nodes.size());
	}

	void setValues(const std::vector<int>&& values)
	{
		m_nodes = std::move(values);

	}

};
nodes_model.ixx
#include "pch.h"


export module nodes;

export import :arraytype;
export import :nd;