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);
            }
        }
Beispiel #3
0
        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(