public void DatasetAutoSaveAsync() { var datasetPath = Path.Join(StorePath, "autosave.pds"); GenerateTestStore("base1", StorePath); GenerateTestStore("base2", StorePath); var dataset = new Dataset("autosave", datasetPath, autoSave: true); dataset.AddSessionFromPsiStore("base1", StorePath, "s1"); dataset.AddSessionFromPsiStore("base2", StorePath, "s2"); Assert.AreEqual(1, dataset.Sessions[0].Partitions.Count()); Assert.AreEqual(1, dataset.Sessions[1].Partitions.Count()); Task.Run(async() => { await dataset.CreateDerivedPartitionAsync( (_, importer, exporter) => { importer.OpenStream <int>("Root").Select(x => x * x).Write("RootSquared", exporter); }, "derived", true, "derived-store"); }).Wait(); // wait for the async function to finish // open the dataset file as a different dataset and validate information var sameDataset = Dataset.Load(datasetPath); Assert.AreEqual(2, sameDataset.Sessions.Count); Assert.AreEqual(2, sameDataset.Sessions[0].Partitions.Count()); Assert.AreEqual(2, sameDataset.Sessions[1].Partitions.Count()); Assert.AreEqual("derived", sameDataset.Sessions[1].Partitions[1].Name); Assert.AreEqual("derived-store", sameDataset.Sessions[1].Partitions[1].StoreName); }
public void DatasetAddSession() { var dataset = new Dataset(); Assert.AreEqual(0, dataset.Sessions.Count); Assert.IsTrue(dataset.OriginatingTimeInterval.IsEmpty); // generate a test store GenerateTestStore("PsiStore", StorePath); // add a session var session0 = dataset.AddSessionFromPsiStore("PsiStore", StorePath, "Session_0"); Assert.AreEqual(1, dataset.Sessions.Count); Assert.AreEqual("Session_0", dataset.Sessions[0].Name); // verify originating time interval Assert.AreEqual(session0.OriginatingTimeInterval.Left, dataset.OriginatingTimeInterval.Left); Assert.AreEqual(session0.OriginatingTimeInterval.Right, dataset.OriginatingTimeInterval.Right); // generate a new store with a different originating time interval than the first GenerateTestStore("NewStore", StorePath); // add a second session with a different name var session1 = dataset.AddSessionFromPsiStore("NewStore", StorePath, "Session_1"); Assert.AreEqual(2, dataset.Sessions.Count); Assert.AreEqual("Session_0", dataset.Sessions[0].Name); Assert.AreEqual("Session_1", dataset.Sessions[1].Name); // verify new originating time interval Assert.AreEqual(session0.OriginatingTimeInterval.Left, dataset.OriginatingTimeInterval.Left); Assert.AreEqual(session1.OriginatingTimeInterval.Right, dataset.OriginatingTimeInterval.Right); }
public void DatasetAppend() { var dataset = new Dataset(); Assert.AreEqual(0, dataset.Sessions.Count); // generate a test store GenerateTestStore("PsiStore", StorePath); // add a session var session0 = dataset.AddSessionFromPsiStore("PsiStore", StorePath, "Session_0"); Assert.AreEqual(1, dataset.Sessions.Count); Assert.AreEqual("Session_0", dataset.Sessions[0].Name); // verify originating time interval Assert.AreEqual(session0.OriginatingTimeInterval.Left, dataset.OriginatingTimeInterval.Left); Assert.AreEqual(session0.OriginatingTimeInterval.Right, dataset.OriginatingTimeInterval.Right); // generate a new store with a different originating time interval than the first GenerateTestStore("NewStore", StorePath); // create a second dataset from the new store and append it to the first var dataset1 = new Dataset(); var session1 = dataset1.AddSessionFromPsiStore("NewStore", StorePath, "Session_1"); dataset.Append(dataset1); Assert.AreEqual(2, dataset.Sessions.Count); Assert.AreEqual("Session_0", dataset.Sessions[0].Name); Assert.AreEqual("Session_1", dataset.Sessions[1].Name); // verify new originating time interval Assert.AreEqual(session0.OriginatingTimeInterval.Left, dataset.OriginatingTimeInterval.Left); Assert.AreEqual(session1.OriginatingTimeInterval.Right, dataset.OriginatingTimeInterval.Right); }
public void DatasetRelativePaths() { var dataset = new Dataset(); // generate a test store GenerateTestStore("PsiStore", StorePath); // add a session and assume it loaded correctly if it has a partition containing a stream dataset.AddSessionFromPsiStore("PsiStore", StorePath, "Session_0"); Assert.IsTrue(dataset.Sessions[0].Partitions[0].AvailableStreams.Count() > 0); // save dataset with relative store paths string datasetFile = Path.Combine(StorePath, "dataset.pds"); dataset.Save(datasetFile, true); // create Temp sub-folder var tempFolder = Path.Combine(StorePath, "Temp"); Directory.CreateDirectory(tempFolder); // move both the dataset file and data stores into the sub-folder Directory.Move(Path.Combine(StorePath, "PsiStore.0000"), Path.Combine(tempFolder, "PsiStore.0000")); string newDatasetFile = Path.Combine(tempFolder, "dataset.pds"); File.Move(datasetFile, newDatasetFile); // reload the saved dataset and verify that store paths are still valid var newDataset = Dataset.Load(newDatasetFile); Assert.IsTrue(newDataset.Sessions[0].Partitions[0].AvailableStreams.Count() > 0); }
public void DatasetChangeEvent() { var sessionEventCalled = false; var datasetEventCalled = false; var dataset = new Dataset("autosave"); GenerateTestStore("base1", StorePath); var session1 = dataset.AddSessionFromPsiStore("base1", StorePath, "session1"); dataset.DatasetChanged += (s, e) => { Assert.AreEqual(e, EventArgs.Empty); datasetEventCalled = true; }; session1.SessionChanged += (s, e) => { Assert.AreEqual(e, EventArgs.Empty); sessionEventCalled = true; }; // the following change should cause both events to be called. session1.Name = "new name"; // validate if the events were called. Assert.IsTrue(datasetEventCalled); Assert.IsTrue(sessionEventCalled); }
public void DatasetAddSessionDuplicateName() { var dataset = new Dataset(); Assert.AreEqual(0, dataset.Sessions.Count); // generate a test store GenerateTestStore("PsiStore", StorePath); // add a session dataset.AddSessionFromPsiStore("PsiStore", StorePath, "Session_0"); Assert.AreEqual(1, dataset.Sessions.Count); Assert.AreEqual("Session_0", dataset.Sessions[0].Name); // generate a new store with a different originating time interval than the first GenerateTestStore("NewStore", StorePath); // add a second session with a duplicate name dataset.AddSessionFromPsiStore("NewStore", StorePath, "Session_0"); // should throw }
public void DatasetAutoSave() { var datasetPath = Path.Join(StorePath, "autosave.pds"); var dataset = new Dataset("autosave", datasetPath, autoSave: true); dataset.Name = "autosave-saved"; GenerateTestStore("store1", StorePath); var session1 = dataset.CreateSession("test-session1"); var session2 = dataset.AddSessionFromPsiStore("store1", StorePath); session1.Name = "no-longer-test-session1"; // open the dataset file as a different dataset and validate information var sameDataset = Dataset.Load(datasetPath); Assert.AreEqual("autosave-saved", sameDataset.Name); Assert.AreEqual(2, sameDataset.Sessions.Count); Assert.AreEqual("no-longer-test-session1", sameDataset.Sessions[0].Name); Assert.AreEqual(session2.Name, sameDataset.Sessions[1].Name); // remove a session and verify changes are saved. dataset.RemoveSession(session1); sameDataset = Dataset.Load(datasetPath); Assert.AreEqual(1, sameDataset.Sessions.Count); Assert.AreEqual(session2.Name, sameDataset.Sessions[0].Name); Assert.AreEqual(1, sameDataset.Sessions[0].Partitions.Count); Assert.AreEqual(session2.OriginatingTimeInterval.Left, sameDataset.Sessions[0].OriginatingTimeInterval.Left); Assert.AreEqual(session2.OriginatingTimeInterval.Right, sameDataset.Sessions[0].OriginatingTimeInterval.Right); // now we edit the session and we want to make sure the changes stick! GenerateTestStore("store3", StorePath); session2.AddPsiStorePartition("store3", StorePath); sameDataset = Dataset.Load(datasetPath); Assert.AreEqual(session2.Name, sameDataset.Sessions[0].Name); Assert.AreEqual(2, sameDataset.Sessions[0].Partitions.Count); Assert.AreEqual("store3", sameDataset.Sessions[0].Partitions[1].Name); }
public void DatasetAppendDuplicateName() { var dataset = new Dataset(); Assert.AreEqual(0, dataset.Sessions.Count); // generate a test store GenerateTestStore("PsiStore", StorePath); // add a session var session0 = dataset.AddSessionFromPsiStore("PsiStore", StorePath, "Session_0"); Assert.AreEqual(1, dataset.Sessions.Count); Assert.AreEqual("Session_0", dataset.Sessions[0].Name); // generate a new store with a different originating time interval than the first GenerateTestStore("NewStore", StorePath); // create a second dataset with a duplicate session name and append it to the first var dataset1 = new Dataset(); var session1 = dataset1.AddSessionFromPsiStore("NewStore", StorePath, "Session_0"); dataset.Append(dataset1); // should throw }