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); }
/// <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); } }