public static void LinksBasedFrequencyStoredOptimalVariantSequenceTest() { using (var scope = new TempLinksTestScope(useSequences: false)) { var links = scope.Links; var constants = links.Constants; links.UseUnicode(); var sequence = UnicodeMap.FromStringToLinkArray(_sequenceExample); var meaningRoot = links.CreatePoint(); var unaryOne = links.CreateAndUpdate(meaningRoot, constants.Itself); var frequencyMarker = links.CreateAndUpdate(meaningRoot, constants.Itself); var frequencyPropertyMarker = links.CreateAndUpdate(meaningRoot, constants.Itself); var unaryNumberToAddressConverter = new UnaryNumberToAddressAddOperationConverter <ulong>(links, unaryOne); var unaryNumberIncrementer = new UnaryNumberIncrementer <ulong>(links, unaryOne); var frequencyIncrementer = new FrequencyIncrementer <ulong>(links, frequencyMarker, unaryOne, unaryNumberIncrementer); var frequencyPropertyOperator = new PropertyOperator <ulong>(links, frequencyPropertyMarker, frequencyMarker); var index = new FrequencyIncrementingSequenceIndex <ulong>(links, frequencyPropertyOperator, frequencyIncrementer); var linkToItsFrequencyNumberConverter = new LinkToItsFrequencyNumberConveter <ulong>(links, frequencyPropertyOperator, unaryNumberToAddressConverter); var sequenceToItsLocalElementLevelsConverter = new SequenceToItsLocalElementLevelsConverter <ulong>(links, linkToItsFrequencyNumberConverter); var optimalVariantConverter = new OptimalVariantConverter <ulong>(links, sequenceToItsLocalElementLevelsConverter); var sequences = new Sequences.Sequences(links, new SequencesOptions <ulong>() { Walker = new LeveledSequenceWalker <ulong>(links) }); ExecuteTest(sequences, sequence, sequenceToItsLocalElementLevelsConverter, index, optimalVariantConverter); } }
public static void ConvertersTest() { using (var scope = new TempLinksTestScope()) { const int N = 10; var links = scope.Links; var meaningRoot = links.CreatePoint(); var one = links.CreateAndUpdate(meaningRoot, links.Constants.Itself); var powerOf2ToUnaryNumberConverter = new PowerOf2ToUnaryNumberConverter <ulong>(links, one); var toUnaryNumberConverter = new AddressToUnaryNumberConverter <ulong>(links, powerOf2ToUnaryNumberConverter); var random = new System.Random(0); ulong[] numbers = new ulong[N]; ulong[] unaryNumbers = new ulong[N]; for (int i = 0; i < N; i++) { numbers[i] = random.NextUInt64(); unaryNumbers[i] = toUnaryNumberConverter.Convert(numbers[i]); } var fromUnaryNumberConverterUsingOrOperation = new UnaryNumberToAddressOrOperationConverter <ulong>(links, powerOf2ToUnaryNumberConverter); var fromUnaryNumberConverterUsingAddOperation = new UnaryNumberToAddressAddOperationConverter <ulong>(links, one); for (int i = 0; i < N; i++) { Assert.Equal(numbers[i], fromUnaryNumberConverterUsingOrOperation.Convert(unaryNumbers[i])); Assert.Equal(numbers[i], fromUnaryNumberConverterUsingAddOperation.Convert(unaryNumbers[i])); } } }