/** Tests the comparions of symbols */
        public void TestEquals()
        {
            char[] adenine = { 'A', 'd', 'e', 'n', 'i', 'n', 'e' };
            Symbol sym1 = new Symbol('a', "Ade", new string(adenine));
            Symbol sym2 = new Symbol('a', "Ade", "Adenine");
            Symbol sym3 = new Symbol('u', "Ura", "Uracil");

            Assert.AreEqual(true, sym1.Equals(sym2));
            Assert.AreEqual(true, sym2.Equals(sym1));
            Assert.AreEqual(false, sym1.Equals(sym3));
            Assert.AreEqual(false, sym3.Equals(sym1));
        }
            /// <summary>
            /// Compares two symbol and returns the "similarity" (weight) between the symbols
            /// </summary>
            /// <param name="symbol1">First symbol.</param>
            /// <param name="symbol2">Second symbol.</param>
            /// <returns>Returns the "similarity" (weight) between the symbols.</returns>
            protected double Compare
                (Symbol symbol1, Symbol symbol2)
            {
                if (repeat.weights == null)
                    return symbol1.Equals(symbol2) ? 1.0 : 0.0;

                return repeat.Weight(symbol1, symbol2);
            }
        /** Tests the comparision with a meta symbol */
        public void TestEquals()
        {
            SymbolMeta sym = new SymbolMeta('X', "XXX", "Unknown");
            Symbol sym2 = new Symbol('a', "Ade", "Adenine");
            Symbol sym3 = new Symbol('u', "Ura", "Uracil");

            Assert.AreEqual(true, sym.Equals(sym2));
            Assert.AreEqual(true, sym2.Equals(sym));

            sym.Add(sym2);
            Assert.AreEqual(true, sym.Equals(sym2));
            Assert.AreEqual(true, sym2.Equals(sym));
            Assert.AreEqual(false, sym.Equals(sym3));
            Assert.AreEqual(false, sym3.Equals(sym));

            sym.Add(sym3);
            Assert.AreEqual(true, sym.Equals(sym));
            Assert.AreEqual(true, sym.Equals(sym2));
            Assert.AreEqual(true, sym.Equals(sym3));
        }
        /// <summary>
        /// Two symbols are equal if the have same name or at least on of the is 
        /// a meta symbol which matches a set of symbols. This methods expects
        /// a non-null symbol as argument.
        /// <para></para>
        /// First the name of symbol is compared and 2nd comparison is done based on its meta type
        /// </summary>
        /// <param name="symbol">symbol Symbol to compare with.</param>
        /// <returns>true: symbols are equal, false: otherwise.</returns>
        public virtual Boolean Equals(Symbol symbol)
        {
            if (symbol.Name == this.Name)
                return true;


            if(symbol is SymbolMeta)
                return symbol.Equals(this);
 

            return false;
        }