Phantom value containing several alternative elements in one position.
Inheritance: Alphabet, IBaseObject
        public void CloneTest()
        {
            var m1 = new ValuePhantom { new ValueString('1'), new ValueString('2'), new ValueString('3') };

            var itsClone = (ValuePhantom)m1.Clone();
            Assert.AreEqual(m1, itsClone);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="PhantomTable"/> class.
        /// </summary>
        /// <param name="source">
        /// Phantom chain.
        /// </param>
        public PhantomTable(BaseChain source)
        {
            BaseChain internalChain = source;
            ulong v = 1;
            StartPositions.Add(0);
            for (int j = 0; j < internalChain.GetLength(); j++)
            {
                if ((((ValuePhantom)internalChain[j])[0] is ValueString)
                    || (((ValuePhantom)internalChain[j])[0] is BaseChain))
                {
                    StartPositions.Add(StartPositions[j] + ((ValuePhantom)internalChain[j])[0].ToString().Length);
                }
                else
                {
                    StartPositions.Add(StartPositions[j] + 1);
                }

                table.Add(null);
            }

            table.Add(null);
            for (int i = internalChain.GetLength(); i > 0; i--)
            {
                var temp = (ValuePhantom)internalChain[i - 1];
                table[i] = new Record(temp, v);
                v *= (uint)temp.Cardinality;
            }

            // tree root is associated with phantom message
            var t = new ValuePhantom { NullValue.Instance() };
            table[0] = new Record(t, v);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="TestObject"/> class.
        /// </summary>
        public TestObject()
        {
            chain = new BaseChain(10);
            chain2 = new BaseChain(5);

            alpha.Add((ValueString)'a');
            alpha.Add((ValueString)'b');
            alpha.Add((ValueString)'c');
            pm1 = new ValuePhantom { alpha[2], alpha[1] };
            pm2 = new ValuePhantom { alpha[0] };

            chain.Set(PhantomMessageBc, 0);
            chain.Set(PhantomMessageA, 1);
            chain.Set(PhantomMessageA, 2);
            chain.Set(PhantomMessageBc, 3);
            chain.Set(PhantomMessageA, 4);
            chain.Set(PhantomMessageBc, 5);
            chain.Set(PhantomMessageA, 6);
            chain.Set(PhantomMessageBc, 7);
            chain.Set(PhantomMessageA, 8);
            chain.Set(PhantomMessageA, 9);

            chain2.Set(alpha[1], 0);
            chain2.Set(PhantomMessageA, 1);
            chain2.Set(PhantomMessageBc, 2);
            chain2.Set(alpha[0], 3);
            chain2.Set(PhantomMessageBc, 4);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Record"/> class.
        /// </summary>
        /// <param name="message">
        /// Phantom message on the current position of sequence.
        /// </param>
        /// <param name="volume">
        /// Variants count for current position.
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// Thrown if there is no message.
        /// </exception>
        public Record(ValuePhantom message, ulong volume)
        {
            if (message == null)
            {
                throw new ArgumentNullException();
            }

            Content = message;
            Volume = volume;
        }
        public void EqualsNullValueTest()
        {
            var m1 = new ValuePhantom();
            Assert.AreEqual(m1, NullValue.Instance());

            m1 = new ValuePhantom { new Chain(10) };
            Assert.AreEqual(m1, NullValue.Instance());

            m1.Add(new ValueString('1'));
            Assert.AreNotEqual(m1, NullValue.Instance());
        }
        public void AddMessagePhantomTest()
        {
            var m2 = new ValuePhantom { new ValueString('4'), new ValueString('2'), new ValueString('5') };
            var m1 = new ValuePhantom { new ValueString('1'), new ValueString('2'), new ValueString('3'), m2 };

            Assert.IsTrue(m1.Equals(new ValueString('1')));
            Assert.IsTrue(m1.Equals(new ValueString('2')));
            Assert.IsTrue(m1.Equals(new ValueString('3')));
            Assert.IsTrue(m1.Equals(new ValueString('4')));
            Assert.IsTrue(m1.Equals(new ValueString('5')));
        }
        public void ContentTest()
        {
            var m1 = new ValuePhantom { new ValueString('1'), new ValueString('2'), new ValueString('3') };
            var m2 = new ValuePhantom { new ValueString('4'), new ValueString('3') };

            var test = new BaseChain(3);
            test.Set(m1, 0);
            test.Set(m2, 1);
            test.Set(m2, 2);

            var table = new PhantomTable(test);
            Assert.AreEqual(m1, table[1].Content);
            Assert.AreEqual(m2, table[2].Content);
            Assert.AreEqual(m2, table[3].Content);
        }
        public void VolumeTest()
        {
            var m3 = new ValuePhantom { new ValueString('a') };
            var m1 = new ValuePhantom { new ValueString('1'), new ValueString('2'), new ValueString('3') };
            var m2 = new ValuePhantom { new ValueString('4'), new ValueString('3') };

            var test = new BaseChain(4);
            test.Set(m1, 0);
            test.Set(m2, 1);
            test.Set(m2, 2);
            test.Set(m3, 3);

            var table = new PhantomTable(test);
            Assert.AreEqual(12, table[0].Volume);
            Assert.AreEqual(4, table[1].Volume);
            Assert.AreEqual(2, table[2].Volume);
            Assert.AreEqual(1, table[3].Volume);
            Assert.AreEqual(1, table[4].Volume);
        }
        public void TreeVolumeTest()
        {
            var m1 = new ValuePhantom { new ValueString('1'), new ValueString('2'), new ValueString('3') };
            var m2 = new ValuePhantom { new ValueString('4'), new ValueString('3') };
            var m3 = new ValuePhantom { new ValueString('a') };

            var test = new BaseChain(4);
            test.Set(m1, 0);
            test.Set(m2, 1);
            test.Set(m2, 2);
            test.Set(m3, 3);

            IGenerator gen = new SimpleGenerator();
            var tree = new TreeTop(test, gen);
            Assert.AreEqual(12, tree.Volume);
            var ch1 = tree.GetChild(0);
            Assert.AreEqual(4, ch1.Volume);
            var ch2 = tree.GetChild(1);
            Assert.AreEqual(4, ch2.Volume);
            var ch3 = tree.GetChild(2);
            Assert.AreEqual(4, ch3.Volume);
        }
        public void EqualsTest()
        {
            var m1 = new ValuePhantom { new ValueString('1'), new ValueString('2'), new ValueString('3') };

            Assert.IsTrue(m1.Equals(new ValueString('3')));
        }
 public void SimpleDecodeTest()
 {
     var input = new BaseChain("F");
     BaseChain result = DnaTransformer.Decode(input);
     var mes = new ValuePhantom { new ValueString("TTT"), new ValueString("TTC") };
     Assert.IsTrue(mes.Equals(result[0]));
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="PhantomChainGenerator"/> class.
        /// </summary>
        /// <param name="chain">
        /// The chain.
        /// </param>
        /// <param name="generator">
        /// The gen.
        /// </param>
        public PhantomChainGenerator(BaseChain chain, IGenerator generator)
        {
            this.generator = generator;
            var reorganizer = new SpacePhantomReorganizer();
            var internalChain = (BaseChain)reorganizer.Reorganize(chain);
            for (int w = 0; w < internalChain.GetLength(); w++)
            {
                totalLength += ((ValuePhantom)internalChain[w])[0].ToString().Length;
            }

            ulong tempVariants = 1;
            int counter = 0;
            for (int k = 0; k < (int)Math.Ceiling((double)internalChain.GetLength() / BasicChainLength); k++)
            {
                tempChains.Add(new BaseChain());
                tempChains[k].ClearAndSetNewLength(BasicChainLength);
                tree.Add(null);
            }

            // variants count calculation cycle
            for (int i = 0; i < tempChains.Count; i++)
            {
                for (int j = 0; j < tempChains[i].GetLength(); j++)
                {
                    ValuePhantom tempMessage;
                    if (counter < internalChain.GetLength())
                    {
                        tempMessage = (ValuePhantom)internalChain[counter];
                        tempChains[i][j] = tempMessage;
                    }
                    else
                    {
                        tempMessage = new ValuePhantom { new ValueString('a') };
                        tempChains[i][j] = tempMessage;
                    }

                    tempVariants *= (uint)tempMessage.Cardinality;
                    counter++;
                }

                if ((i != tempChains.Count - 1) || (tempChains.Count == 1))
                {
                    Variants = Math.Min(Variants, tempVariants);
                }

                tempVariants = 1;
                tree[i] = new TreeTop(tempChains[i], generator);
            }
        }