public void Transpose() { StringTransducer transducer = StringTransducer.Consume(StringAutomaton.Constant(3.0)); StringTransducer transpose1 = StringTransducer.Transpose(transducer); StringTransducer transpose2 = transducer.Clone(); transpose2.TransposeInPlace(); var pairs = new[] { new[] { "a", string.Empty }, new[] { string.Empty, string.Empty }, new[] { "a", "bc" }, new[] { "a", "a" } }; foreach (string[] valuePair in pairs) { double referenceValue1 = transducer.GetValue(valuePair[0], valuePair[1]); Assert.Equal(referenceValue1, transpose1.GetValue(valuePair[1], valuePair[0])); Assert.Equal(referenceValue1, transpose2.GetValue(valuePair[1], valuePair[0])); double referenceValue2 = transducer.GetValue(valuePair[1], valuePair[0]); Assert.Equal(referenceValue2, transpose1.GetValue(valuePair[0], valuePair[1])); Assert.Equal(referenceValue2, transpose2.GetValue(valuePair[0], valuePair[1])); } }
/// <summary> /// Tests if a transducer has the desired value on a given pair of strings. /// </summary> /// <param name="transducer">The transducer.</param> /// <param name="string1">The first string.</param> /// <param name="string2">The second string.</param> /// <param name="trueValue">The desired value of the transducer on the strings.</param> public static void TestTransducerValue( StringTransducer transducer, string string1, string string2, double trueValue) { // Test ProjectSource(sequence) var result = transducer.ProjectSource(string1); TestValue(result, trueValue, string2); // Test ProjectSource(func) TestTransducerProjection(transducer, StringAutomaton.ConstantOn(1.0, string1), string2, trueValue); // Test GetValue() double value = transducer.GetValue(string1, string2); Assert.Equal(trueValue, value, LogValueEps); }