public async Task Test_FitsReader(FitsFileInfo testCaseData) { var path = Path.Combine(ReaderWriter_TestCaseDataProvider.TestDataDirectory, testCaseData.Name); Assume.That(File.Exists(path)); await using var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read); await using var fitsReader = new FitsReader(fileStream, 0, true); var counter = 0; await foreach (var block in fitsReader.EnumerateBlocksAsync()) { Assume.That(counter, Is.LessThan(testCaseData.NumUnits)); Assert.That(block.Keys.Count, Is.EqualTo(testCaseData.NumKeywordsPerUnit[counter++])); TestContext.Out.WriteLine((counter, block.Keys.Count)); } Assert.That(counter, Is.EqualTo(testCaseData.NumUnits)); }
public async Task ReadWriteTest <T>(object?__ = null) where T : unmanaged, IComparable <T>, IEquatable <T> { const int n = 248; const int m = 496; var converter = ConverterProvider.GetImageConverter <T>(); var data = ArrayPool <T> .Shared.Rent(n *m); try { for (var i = 0; i < n * m; i++) { data[i] = Internal.UnsafeNumerics.MathOps.DangerousCast <double, T>(_r.NextDouble() * i); } var src = Image.Create <T>(data.AsSpan(0, n * m), n, m); await using var fs = new FileStream($"multiple_records_{typeof(T).Name}.fits", FileMode.Create, FileAccess.ReadWrite); await using (var writer = new FitsWriter(fs)) { await converter.WriteToFitsAsync(src, writer); await converter.WriteToFitsAsync(src, writer, true); } fs.Seek(0, SeekOrigin.Begin); var images = new List <IImage <T> >(2); await using (var reader = new FitsReader(fs)) { await foreach (var block in reader.EnumerateBlocksAsync()) { images.Add(converter.ConvertFromBlock(block, out _)); } } Assert.That(images, Has.Count.EqualTo(2)); Assert.AreEqual(src, images[0]); Assert.AreEqual(src, images[1]); } finally { ArrayPool <T> .Shared.Return(data); } }
private async void OpenButton_Click(object sender, EventArgs e) { var result = FitsFileOpener.ShowDialog(); if (result == DialogResult.OK) { FitsHeaderDataUnit primaryHdu; using (var stream = FitsFileOpener.OpenFile()) { var reader = new FitsReader(stream); primaryHdu = await reader.ReadPrimaryHeaderDataUnit().ConfigureAwait(true); } var image = primaryHdu.ToWindowsBitmap(); FitsImage.Image = image; HeaderRecords.BeginUpdate(); HeaderRecords.Items.Clear(); HeaderRecords.Items.AddRange(primaryHdu.Header.HeaderRecords.Select(p => p.Text).ToArray()); HeaderRecords.EndUpdate(); } }
public async Task Test_FitsReader_FitsWrite(FitsFileInfo testCaseData) { var path = Path.Combine(ReaderWriter_TestCaseDataProvider.TestDataDirectory, testCaseData.Name); Assume.That(File.Exists(path)); List <Block> content; List <Block> reReadContent; await using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read)) { await using var reader = new FitsReader(fileStream); content = await reader.EnumerateBlocksAsync().ToListAsync(); } await using var memStr = new MemoryStream(); { await using (var writer = new FitsWriter(memStr)) foreach (var block in content) { await writer.WriteBlockAsync(block); } memStr.Seek(0, SeekOrigin.Begin); await using var reader = new FitsReader(memStr); reReadContent = await reader.EnumerateBlocksAsync().ToListAsync(); } Assert.AreEqual(content.Count, reReadContent.Count); for (var i = 0; i < content.Count; i++) { CollectionAssert.AreEqual(content[i].Keys, reReadContent[i].Keys); Assert.IsTrue(content[i].RawData.SequenceEqual(reReadContent[i].RawData)); } }
public async ValueTask <(IImage <T> Value, ImmutableList <IFitsValue> ExtraKeys)> ReadFromFitsAsync( FitsReader reader, CancellationToken token = default) => (ConvertFromBlock(