/** Tests the adding of symbols to the composition */
        public void TestAdd()
        {
			Composition composition = new Composition( "Composition", AlphabetType.DNA, 1, 3, 1, Composition.MatchMode.ALL, 0.0 );
            composition.Add('a', 1.0);
            composition.Add('c', 3.0);
            composition.Add('t', 4.0);
            composition.Add('g', 2.0);
            composition.DefaultWeight = (3.5);
            Assert.AreEqual(4.0, composition.MaxWeight);
            Assert.AreEqual(1.0, composition.MinWeight);
            Assert.AreEqual(1.0, composition.Weight('a'));
            Assert.AreEqual(3.0, composition.Weight('c'));
            Assert.AreEqual(4.0, composition.Weight('t'));
            Assert.AreEqual(2.0, composition.Weight('g'));
            Assert.AreEqual(3.5, composition.Weight('u'));
        }
        /** Test the setter for the default weight */
        public void TestDefaultWeight()
        {
			Composition composition = new Composition( "Composition", AlphabetType.DNA, 1, 3, 1, Composition.MatchMode.ALL, 0.0 );
            composition.DefaultWeight = (7.0);
            Assert.AreEqual(7.0, composition.MaxWeight);
            Assert.AreEqual(7.0, composition.MinWeight);

            composition.Add('c', 3.0);
            Assert.AreEqual(7.0, composition.MaxWeight);
            Assert.AreEqual(3.0, composition.MinWeight);
        }
        public void TestMatchBest()
        {
            Sequence seq = new Sequence(AlphabetType.DNA, "actcctctg");
            Composition composition = new Composition("Composition", AlphabetType.DNA, 3, 8, 1.7, Composition.MatchMode.BEST, 0.0);
            composition.Add('a', 1.0);
            composition.Add('c', 2.0);
            composition.Add('t', 3.0);
            composition.DefaultWeight = (1.0);

            Match match = composition.Match(seq, 1);
            Assert.AreEqual(1, match.Start);
            Assert.AreEqual(8, match.End);
            Assert.AreEqual("actcctct", match.Letters());
            Assert.AreEqual(0.75, match.Similarity, 1e-2);

            match = seq.SearchBest(0, 0, composition);
            Assert.AreEqual(6, match.Start);
            Assert.AreEqual("tct", match.Letters());
            Assert.AreEqual(0.88, match.Similarity, 1e-2);
        }
        /** Test for match method from pattern interface */
        public void TestMatchAll()
        {
            Sequence seq = new Sequence(AlphabetType.DNA, "act");
			Composition composition = new Composition( "Composition", AlphabetType.DNA, 2, 3, 1, Composition.MatchMode.ALL, 0.0 );
            composition.Add('a', 1.0);
            composition.Add('c', 2.0);
            composition.DefaultWeight = (3.0);
            Match match = composition.Match(seq, 1);
            Assert.AreEqual(2, match.Length);
            Assert.AreEqual(1, match.Start);
            Assert.AreEqual(2, match.End);
            Assert.AreEqual("ac", match.Letters());
            Assert.AreEqual(0.5, match.Similarity, 1e-2);

            match = seq.SearchBest(0, 0, composition);
            Assert.AreEqual(2, match.Start);
            Assert.AreEqual("ct", match.Letters());
            Assert.AreEqual(0.83, match.Similarity, 1e-2);

            FeatureList matches = seq.Search(0, 0, composition);
            Assert.AreEqual(3, matches.Count);
            Assert.AreEqual("ac", matches[0].Letters());
            Assert.AreEqual("act", matches[1].Letters());
            Assert.AreEqual("ct", matches[2].Letters());
        }