public static void BasicHeapMemoryTest() { using (var memory = new HeapResizableDirectMemory(UInt64UnitedMemoryLinks.DefaultLinksSizeStep)) using (var memoryAdapter = new UInt64UnitedMemoryLinks(memory, UInt64UnitedMemoryLinks.DefaultLinksSizeStep)) { memoryAdapter.TestBasicMemoryOperations(); } }
public static void NonexistentReferencesHeapMemoryTest() { using (var memory = new HeapResizableDirectMemory(UInt64UnitedMemoryLinks.DefaultLinksSizeStep)) using (var memoryAdapter = new UInt64UnitedMemoryLinks(memory, UInt64UnitedMemoryLinks.DefaultLinksSizeStep)) { memoryAdapter.TestNonexistentReferences(); } }
public static void BasicFileMappedMemoryTest() { var tempFilename = Path.GetTempFileName(); using (var memoryAdapter = new UInt64UnitedMemoryLinks(tempFilename)) { memoryAdapter.TestBasicMemoryOperations(); } File.Delete(tempFilename); }
public static void Bug1Test() { var tempDatabaseFilename = Path.GetTempFileName(); var tempTransactionLogFilename = Path.GetTempFileName(); var itself = _constants.Itself; // User Code Error (Autoreverted), some data saved try { ulong l1; ulong l2; using (var memory = new UInt64UnitedMemoryLinks(tempDatabaseFilename)) using (var memoryAdapter = new UInt64LinksTransactionsLayer(memory, tempTransactionLogFilename)) using (var links = new UInt64Links(memoryAdapter)) { l1 = links.CreateAndUpdate(itself, itself); l2 = links.CreateAndUpdate(itself, itself); l2 = links.Update(l2, l2, l1, l2); links.CreateAndUpdate(l2, itself); links.CreateAndUpdate(l2, itself); } Global.Trash = FileHelpers.ReadAll <UInt64LinksTransactionsLayer.Transition>(tempTransactionLogFilename); using (var memory = new UInt64UnitedMemoryLinks(tempDatabaseFilename)) using (var memoryAdapter = new UInt64LinksTransactionsLayer(memory, tempTransactionLogFilename)) using (var links = new UInt64Links(memoryAdapter)) { using (var transaction = memoryAdapter.BeginTransaction()) { l2 = links.Update(l2, l1); links.Delete(l2); ExceptionThrower(); transaction.Commit(); } Global.Trash = links.Count(); } } catch { Global.Trash = FileHelpers.ReadAll <UInt64LinksTransactionsLayer.Transition>(tempTransactionLogFilename); } File.Delete(tempDatabaseFilename); File.Delete(tempTransactionLogFilename); }
public static void SavedSequencesOptimizationTest() { LinksConstants <ulong> constants = new LinksConstants <ulong>((1, long.MaxValue), (long.MaxValue + 1UL, ulong.MaxValue)); using (var memory = new HeapResizableDirectMemory()) using (var disposableLinks = new UInt64UnitedMemoryLinks(memory, UInt64UnitedMemoryLinks.DefaultLinksSizeStep, constants, IndexTreeType.Default)) { var links = new UInt64Links(disposableLinks); var root = links.CreatePoint(); //var numberToAddressConverter = new RawNumberToAddressConverter<ulong>(); var addressToNumberConverter = new AddressToRawNumberConverter <ulong>(); var unicodeSymbolMarker = links.GetOrCreate(root, addressToNumberConverter.Convert(1)); var unicodeSequenceMarker = links.GetOrCreate(root, addressToNumberConverter.Convert(2)); var totalSequenceSymbolFrequencyCounter = new TotalSequenceSymbolFrequencyCounter <ulong>(links); var linkFrequenciesCache = new LinkFrequenciesCache <ulong>(links, totalSequenceSymbolFrequencyCounter); var index = new CachedFrequencyIncrementingSequenceIndex <ulong>(linkFrequenciesCache); var linkToItsFrequencyNumberConverter = new FrequenciesCacheBasedLinkToItsFrequencyNumberConverter <ulong>(linkFrequenciesCache); var sequenceToItsLocalElementLevelsConverter = new SequenceToItsLocalElementLevelsConverter <ulong>(links, linkToItsFrequencyNumberConverter); var optimalVariantConverter = new OptimalVariantConverter <ulong>(links, sequenceToItsLocalElementLevelsConverter); var walker = new RightSequenceWalker <ulong>(links, new DefaultStack <ulong>(), (link) => constants.IsExternalReference(link) || links.IsPartialPoint(link)); var unicodeSequencesOptions = new SequencesOptions <ulong>() { UseSequenceMarker = true, SequenceMarkerLink = unicodeSequenceMarker, UseIndex = true, Index = index, LinksToSequenceConverter = optimalVariantConverter, Walker = walker, UseGarbageCollection = true }; var unicodeSequences = new Sequences.Sequences(new SynchronizedLinks <ulong>(links), unicodeSequencesOptions); // Create some sequences var strings = _loremIpsumExample.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); var arrays = strings.Select(x => x.Select(y => addressToNumberConverter.Convert(y)).ToArray()).ToArray(); for (int i = 0; i < arrays.Length; i++) { unicodeSequences.Create(arrays[i].ShiftRight()); } var linksCountAfterCreation = links.Count(); // get list of sequences links // for each sequence link // create new sequence version // if new sequence is not the same as sequence link // delete sequence link // collect garbadge unicodeSequences.CompactAll(); var linksCountAfterCompactification = links.Count(); Assert.True(linksCountAfterCompactification < linksCountAfterCreation); } }