public async Task BuildDataAsync()
        {
            using (var ucdSource = await GetDataSourceAsync(_httpClient, UnicodeCharacterDataUri, "", UcdDataSourceName, UcdRequiredFiles, true, null, null, null))
                using (var unihanSource = await GetDataSourceAsync(_httpClient, UnicodeCharacterDataUri, "", UnihanDataSourceName, UnihanRequiredFiles, true, null, null, null))
                    using (var emojiSource = await GetDataSourceAsync(_httpClient, EmojiDataUri, "", EmojiDataSourceName, EmojiRequiredFiles, false, null, null, null))
                    {
                        var data = await UnicodeDataProcessor.BuildDataAsync(ucdSource, unihanSource, emojiSource);

                        Assert.Equal('\t', data.GetUcd('\t').CodePointRange.FirstCodePoint);
                    }
        }
        public async Task BuildDataAsync()
        {
            using (var ucdSource = await Program.GetDataSourceAsync(Program.UcdArchiveName, Program.UcdDirectoryName, Program.ucdRequiredFiles, null, null, null))
                using (var unihanSource = await Program.GetDataSourceAsync(Program.UnihanArchiveName, Program.UnihanDirectoryName, Program.ucdRequiredFiles, null, null, null))
                    using (var emojiSource = new HttpDataSource(Program.EmojiDataUri, Program.HttpClient))
                    {
                        var data = (await UnicodeDataProcessor.BuildDataAsync(ucdSource, unihanSource, emojiSource));

                        Assert.Equal((int)'\t', data.GetUcd('\t').CodePointRange.FirstCodePoint);
                    }
        }
        public async Task BuildAndWriteDataAsync()
        {
            using (var ucdSource = await GetDataSourceAsync(_httpClient, UnicodeCharacterDataUri, "", UcdDataSourceName, UcdRequiredFiles, true, null, null, null))
                using (var unihanSource = await GetDataSourceAsync(_httpClient, UnicodeCharacterDataUri, "", UnihanDataSourceName, UnihanRequiredFiles, true, null, null, null))
                    using (var emojiSource = await GetDataSourceAsync(_httpClient, EmojiDataUri, "", EmojiDataSourceName, EmojiRequiredFiles, false, null, null, null))
                    {
                        var data = await UnicodeDataProcessor.BuildDataAsync(ucdSource, unihanSource, emojiSource);

                        using (var stream = new MemoryStream())
                        {
                            data.WriteToStream(stream);
                        }
                    }
        }
        public async Task BuildAndWriteDataAsync()
        {
            using (var ucdSource = await Program.GetDataSourceAsync(Program.UcdArchiveName, Program.UcdDirectoryName, Program.ucdRequiredFiles, null, null, null))
                using (var unihanSource = await Program.GetDataSourceAsync(Program.UnihanArchiveName, Program.UnihanDirectoryName, Program.ucdRequiredFiles, null, null, null))
                    using (var emojiSource = new HttpDataSource(Program.EmojiDataUri, Program.HttpClient))
                    {
                        var data = (await UnicodeDataProcessor.BuildDataAsync(ucdSource, unihanSource, emojiSource));

                        //using (var stream = new DeflateStream(File.Create("ucd.dat"), CompressionLevel.Optimal, false))
                        using (var stream = File.Create("ucd.dat"))
                        {
                            data.WriteToStream(stream);
                        }
                    }
        }