public void SetNodeNameTest()
        {
            List <string> level1_names, level2_names, level3_names, level4_names;

            level1_names = new List <string>()
            {
                ModelName.LEVELNAME_QUALITYATTRIBUTE_1
            };
            level2_names = new List <string>()
            {
                ModelName.LEVELNAME_ATTRIBUTE_1,
                ModelName.LEVELNAME_ATTRIBUTE_2,
                ModelName.LEVELNAME_ATTRIBUTE_3,
                ModelName.LEVELNAME_ATTRIBUTE_4
            };
            level3_names = new List <string>()
            {
                ModelName.LEVELNAME_PROPERTY_1,
                ModelName.LEVELNAME_PROPERTY_2,
                ModelName.LEVELNAME_PROPERTY_3,
                ModelName.LEVELNAME_PROPERTY_4,
                ModelName.LEVELNAME_PROPERTY_5,
                ModelName.LEVELNAME_PROPERTY_6,
                ModelName.LEVELNAME_PROPERTY_7,
            };
            level4_names = new List <string>()
            {
                ModelName.LEVELNAME_METRIC_1,
                ModelName.LEVELNAME_METRIC_2,
                ModelName.LEVELNAME_METRIC_3,
                ModelName.LEVELNAME_METRIC_4,
                ModelName.LEVELNAME_METRIC_5,
                ModelName.LEVELNAME_METRIC_6,
                ModelName.LEVELNAME_METRIC_7,
                ModelName.LEVELNAME_METRIC_8
            };

            ModelName mn = new ModelName();

            ModelNode[] node1 = new ModelNode[ModelLink.LEVEL1_UNITNUM];
            ModelNode[] node2 = new ModelNode[ModelLink.LEVEL2_UNITNUM];
            ModelNode[] node3 = new ModelNode[ModelLink.LEVEL3_UNITNUM];
            ModelNode[] node4 = new ModelNode[ModelLink.LEVEL4_UNITNUM];
            //Level 1
            for (int i = 0; i < ModelLink.LEVEL1_UNITNUM; i++)
            {
                node1[i] = new ModelNode();
                mn.SetNodeName(node1[i], level1_names[i]);
            }
            Assert.AreEqual(ModelName.LEVELNAME_QUALITYATTRIBUTE_1, node1[0].NodeName);
            Assert.AreEqual("", node1[0].NodeName_Detail);
            Assert.AreEqual(1, node1[0].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL1_NAME, node1[0].NodeLevelName);
            //Level 2
            for (int i = 0; i < ModelLink.LEVEL2_UNITNUM; i++)
            {
                node2[i] = new ModelNode();
                mn.SetNodeName(node2[i], level2_names[i]);
            }
            Assert.AreEqual(ModelName.LEVELNAME_ATTRIBUTE_1, node2[0].NodeName);
            Assert.AreEqual("", node2[0].NodeName_Detail);
            Assert.AreEqual(2, node2[0].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL2_NAME, node2[0].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_ATTRIBUTE_2, node2[1].NodeName);
            Assert.AreEqual("", node2[1].NodeName_Detail);
            Assert.AreEqual(2, node2[1].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL2_NAME, node2[1].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_ATTRIBUTE_3, node2[2].NodeName);
            Assert.AreEqual("", node2[2].NodeName_Detail);
            Assert.AreEqual(2, node2[2].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL2_NAME, node2[2].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_ATTRIBUTE_4, node2[3].NodeName);
            Assert.AreEqual("", node2[3].NodeName_Detail);
            Assert.AreEqual(2, node2[3].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL2_NAME, node2[3].NodeLevelName);
            //Level 3
            for (int i = 0; i < ModelLink.LEVEL3_UNITNUM; i++)
            {
                node3[i] = new ModelNode();
                mn.SetNodeName(node3[i], level3_names[i]);
            }
            Assert.AreEqual(ModelName.LEVELNAME_PROPERTY_1, node3[0].NodeName);
            Assert.AreEqual("", node3[0].NodeName_Detail);
            Assert.AreEqual(3, node3[0].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL3_NAME, node3[0].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_PROPERTY_2, node3[1].NodeName);
            Assert.AreEqual("", node3[1].NodeName_Detail);
            Assert.AreEqual(3, node3[1].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL3_NAME, node3[1].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_PROPERTY_3, node3[2].NodeName);
            Assert.AreEqual("", node3[2].NodeName_Detail);
            Assert.AreEqual(3, node3[2].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL3_NAME, node3[2].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_PROPERTY_4, node3[3].NodeName);
            Assert.AreEqual("", node3[3].NodeName_Detail);
            Assert.AreEqual(3, node3[3].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL3_NAME, node3[3].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_PROPERTY_5, node3[4].NodeName);
            Assert.AreEqual("", node3[4].NodeName_Detail);
            Assert.AreEqual(3, node3[4].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL3_NAME, node3[4].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_PROPERTY_6, node3[5].NodeName);
            Assert.AreEqual("", node3[5].NodeName_Detail);
            Assert.AreEqual(3, node3[5].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL3_NAME, node3[5].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_PROPERTY_7, node3[6].NodeName);
            Assert.AreEqual("", node3[6].NodeName_Detail);
            Assert.AreEqual(3, node3[6].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL3_NAME, node3[6].NodeLevelName);
            //Level 4
            for (int i = 0; i < ModelLink.LEVEL4_UNITNUM; i++)
            {
                node4[i] = new ModelNode();
                mn.SetNodeName(node4[i], level4_names[i]);
            }
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_1, node4[0].NodeName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_1_DETAIL, node4[0].NodeName_Detail);
            Assert.AreEqual(4, node4[0].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL4_NAME, node4[0].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_2, node4[1].NodeName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_2_DETAIL, node4[1].NodeName_Detail);
            Assert.AreEqual(4, node4[1].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL4_NAME, node4[1].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_3, node4[2].NodeName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_3_DETAIL, node4[2].NodeName_Detail);
            Assert.AreEqual(4, node4[2].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL4_NAME, node4[2].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_4, node4[3].NodeName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_4_DETAIL, node4[3].NodeName_Detail);
            Assert.AreEqual(4, node4[3].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL4_NAME, node4[3].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_5, node4[4].NodeName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_5_DETAIL, node4[4].NodeName_Detail);
            Assert.AreEqual(4, node4[4].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL4_NAME, node4[4].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_6, node4[5].NodeName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_6_DETAIL, node4[5].NodeName_Detail);
            Assert.AreEqual(4, node4[5].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL4_NAME, node4[5].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_7, node4[6].NodeName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_7_DETAIL, node4[6].NodeName_Detail);
            Assert.AreEqual(4, node4[6].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL4_NAME, node4[6].NodeLevelName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_8, node4[7].NodeName);
            Assert.AreEqual(ModelName.LEVELNAME_METRIC_8_DETAIL, node4[7].NodeName_Detail);
            Assert.AreEqual(4, node4[7].NodeLevel);
            Assert.AreEqual(ModelName.LEVEL4_NAME, node4[7].NodeLevelName);
        }
        public void SetNodeGainORDamageTest()
        {
            ModelName   mn = new ModelName();
            ModelWeight mw = new ModelWeight();

            ModelNode[] l1n = new ModelNode[ModelLink.LEVEL1_UNITNUM];
            ModelNode[] l2n = new ModelNode[ModelLink.LEVEL2_UNITNUM];
            ModelNode[] l3n = new ModelNode[ModelLink.LEVEL3_UNITNUM];
            ModelNode[] l4n = new ModelNode[ModelLink.LEVEL4_UNITNUM];
            for (int i = 0; i < ModelLink.LEVEL1_UNITNUM; i++)
            {
                l1n[i] = new ModelNode();
            }
            for (int i = 0; i < ModelLink.LEVEL2_UNITNUM; i++)
            {
                l2n[i] = new ModelNode();
            }
            for (int i = 0; i < ModelLink.LEVEL3_UNITNUM; i++)
            {
                l3n[i] = new ModelNode();
            }
            for (int i = 0; i < ModelLink.LEVEL4_UNITNUM; i++)
            {
                l4n[i] = new ModelNode();
            }

            mn.SetNodeName(l1n[0], ModelName.LEVELNAME_QUALITYATTRIBUTE_1);
            mn.SetNodeName(l2n[0], ModelName.LEVELNAME_ATTRIBUTE_1);
            mn.SetNodeName(l2n[1], ModelName.LEVELNAME_ATTRIBUTE_2);
            mn.SetNodeName(l2n[2], ModelName.LEVELNAME_ATTRIBUTE_3);
            mn.SetNodeName(l2n[3], ModelName.LEVELNAME_ATTRIBUTE_4);
            mn.SetNodeName(l3n[0], ModelName.LEVELNAME_PROPERTY_1);
            mn.SetNodeName(l3n[1], ModelName.LEVELNAME_PROPERTY_2);
            mn.SetNodeName(l3n[2], ModelName.LEVELNAME_PROPERTY_3);
            mn.SetNodeName(l3n[3], ModelName.LEVELNAME_PROPERTY_4);
            mn.SetNodeName(l3n[4], ModelName.LEVELNAME_PROPERTY_5);
            mn.SetNodeName(l3n[5], ModelName.LEVELNAME_PROPERTY_6);
            mn.SetNodeName(l3n[6], ModelName.LEVELNAME_PROPERTY_7);
            mn.SetNodeName(l4n[0], ModelName.LEVELNAME_METRIC_1);
            mn.SetNodeName(l4n[1], ModelName.LEVELNAME_METRIC_2);
            mn.SetNodeName(l4n[2], ModelName.LEVELNAME_METRIC_3);
            mn.SetNodeName(l4n[3], ModelName.LEVELNAME_METRIC_4);
            mn.SetNodeName(l4n[4], ModelName.LEVELNAME_METRIC_5);
            mn.SetNodeName(l4n[5], ModelName.LEVELNAME_METRIC_6);
            mn.SetNodeName(l4n[6], ModelName.LEVELNAME_METRIC_7);
            mn.SetNodeName(l4n[7], ModelName.LEVELNAME_METRIC_8);

            for (int i = 0; i < ModelLink.LEVEL1_UNITNUM; i++)
            {
                mw.SetNodeGainORDamage(l1n[i]);
            }
            for (int i = 0; i < ModelLink.LEVEL2_UNITNUM; i++)
            {
                mw.SetNodeGainORDamage(l2n[i]);
            }
            for (int i = 0; i < ModelLink.LEVEL3_UNITNUM; i++)
            {
                mw.SetNodeGainORDamage(l3n[i]);
            }
            for (int i = 0; i < ModelLink.LEVEL4_UNITNUM; i++)
            {
                mw.SetNodeGainORDamage(l4n[i]);
            }

            int result;

            for (int i = 0; i < ModelLink.LEVEL1_UNITNUM; i++)
            {
                mw.node_affect_dictionary.TryGetValue(l1n[i].NodeName, out result);
                Assert.AreEqual(result, l1n[i].gain_or_damage);
            }
            for (int i = 0; i < ModelLink.LEVEL2_UNITNUM; i++)
            {
                mw.node_affect_dictionary.TryGetValue(l2n[i].NodeName, out result);
                Assert.AreEqual(result, l2n[i].gain_or_damage);
            }
            for (int i = 0; i < ModelLink.LEVEL3_UNITNUM; i++)
            {
                mw.node_affect_dictionary.TryGetValue(l3n[i].NodeName, out result);
                Assert.AreEqual(result, l3n[i].gain_or_damage);
            }
            for (int i = 0; i < ModelLink.LEVEL4_UNITNUM; i++)
            {
                mw.node_affect_dictionary.TryGetValue(l4n[i].NodeName, out result);
                Assert.AreEqual(result, l4n[i].gain_or_damage);
            }
        }