public void TestCoding32AlphabetAnd96TextLength() { var source = "АбвгдеёйжзийклмнопрстуфхчшщьъэюяАбвгдеёйжзийклмнопрстуфхчшщьъэюяАбвгдеёйжзийклмнопрстуфхчшщьъэюя"; var encoded = ArithmeticCoding.Encode(source); var decoded = ArithmeticCoding.Decode(encoded); Assert.AreEqual(source, decoded); }
public void TestCoding20AlphabetAbd20TextLength() { var source = "абвгдеёжзийклмнопрст"; var encoded = ArithmeticCoding.Encode(source); var decoded = ArithmeticCoding.Decode(encoded); Assert.AreEqual(source, decoded); }
public void TestCoding1AlphabetAnd20TextLength() { var source = "cccccccccccccccccccc"; var encoded = ArithmeticCoding.Encode(source); var decoded = ArithmeticCoding.Decode(encoded); Assert.AreEqual(source, decoded); }
public void TestCoding64AlphabetAnd128TextLength() { var source = "абвгдеёжзийклмнопрстуфхчшщъьэюяABCDEFGHIJKLMNOPQRSTUVWXYZ123456" + "абвгдеёжзийклмнопрстуфхчшщъьэюяABCDEFGHIJKLMNOPQRSTUVWXYZ123456"; var encoded = ArithmeticCoding.Encode(source); var decoded = ArithmeticCoding.Decode(encoded); Assert.AreEqual(source, decoded); }
public void TestEncodeWriteAndReadDecode() { const string source = "abcdefghklmopqastuvwxyz"; const string fileName = "test1.acode"; var fullPath = Path.Combine(GetTestFolder(), fileName); var encoded = ArithmeticCoding.Encode(source); ArithmeticFile.Write(fullPath, encoded); var read = ArithmeticFile.Read(fullPath); var decoded = ArithmeticCoding.Decode(read); Assert.AreEqual(source, decoded); }
private void Decode(object sender, RoutedEventArgs e) { Interval interval = new Interval(0, 1); decimal message = decimal.Parse(messageToDecodeTextBox.Text); string outMessage = ""; TextBox[] probablities = new TextBox[itemsNumber]; char[] letters = new char[itemsNumber]; for (int i = 0; i < itemsNumber; i++) { probablities[i] = alphabet[i, 1]; } decimal[] probs = parseProbabilities(probablities); probs = ArithmeticCoding.MakeProportions(probs); for (int i = 0; i < probablities.Length; i++) { Interval[] intervals = ArithmeticCoding.MakeSubintervals(interval, probs); for (int j = 0; j < intervals.Length; j++) { if ((message > intervals[j].l) && (message < intervals[j].r)) { outMessage += alphabet[j, 0].Text.ToString(); if (((intervals[j].l + intervals[j].r) / 2) == message) { i = intervals.Length; } else { interval = new Interval(intervals[j].l, intervals[j].r); } } if (((intervals[j].l + intervals[j].r) / 2) == message) { j = intervals.Length; } } } resultDecodingTextBlock.Text = outMessage; resultDeCodingGrid.Visibility = Visibility.Visible; resultDeCodingGrid.Opacity = 0; resultDeCodingGrid.OpacityTransition = new ScalarTransition() { Duration = new TimeSpan(0, 0, 0, 0, 500) }; resultDeCodingGrid.Opacity = 1; }
public void TestCoding256AlphabetAnd1024TextLength() { var sb = new StringBuilder(1024); for (int i = 0; i < 256; i++) { sb.Append((char)i); } var s = sb.ToString(); sb.Append(s); sb.Append(s); sb.Append(s); var source = sb.ToString(); var encoded = ArithmeticCoding.Encode(source); var decoded = ArithmeticCoding.Decode(encoded); Assert.AreEqual(source, decoded); }
private void BtnSaveCode_Click(object sender, EventArgs e) { if (RtbSource.TextLength == 0) { return; } if (_sdfEncoded.ShowDialog() != DialogResult.OK) { return; } try { var encoded = ArithmeticCoding.Encode(RtbSource.Text); ArithmeticFile.Write(_sdfEncoded.FileName, encoded); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private static void Decompress(string inputFile, string outputFile) { ArithmeticCoding.Decompress(inputFile, outputFile); }
private async void Calculate(object sender, RoutedEventArgs e) { try { char[] message = messageTextBox.Text.ToCharArray(); Interval interval = new Interval(); TextBox[] probablities = new TextBox[itemsNumber]; char[] letters = new char[itemsNumber]; for (int i = 0; i < itemsNumber; i++) { probablities[i] = alphabet[i, 1]; var characters = alphabet[i, 0].Text.ToCharArray(); letters[i] = characters[0]; } bool isMessageInAlphabet = false; for (int i = 0; i < message.Length; i++) { isMessageInAlphabet = checkLetterInAlphabet(message[i], letters); if (!isMessageInAlphabet) { break; } } if (!isMessageInAlphabet) { ContentDialog dialog = new ContentDialog { Title = "Error", Content = "Wiadomość niepoprawna", CloseButtonText = "ok" }; ContentDialogResult result = await dialog.ShowAsync(); return; } try { subIntervalsGrid.Children.Clear(); checkProbability(probablities); decimal[] probs = parseProbabilities(probablities); probs = ArithmeticCoding.MakeProportions(probs); for (int p = 0; p < message.GetLength(0); p++) { Interval[] intervals = ArithmeticCoding.MakeSubintervals(interval, probs); addSubinterval(intervals, message[p], letters); interval = ArithmeticCoding.SetCurrentInterval(intervals, letters, message[p]); } resultCodingGrid.Visibility = Visibility.Visible; resultCodingGrid.Opacity = 0; resultCodingGrid.OpacityTransition = new ScalarTransition() { Duration = new TimeSpan(0, 0, 0, 0, 500) }; resultCodingGrid.Opacity = 1; resultCodingTextBlock.Text = "Wynik: " + ((interval.l + interval.r) / 2).ToString(); subIntervalsGrid.Visibility = Visibility.Visible; subIntervalsGrid.Opacity = 0; subIntervalsGrid.OpacityTransition = new ScalarTransition() { Duration = new TimeSpan(0, 0, 0, 0, 500) }; subIntervalsGrid.Opacity = 1; } catch (Exception ex) { ContentDialog dialog = new ContentDialog { Title = "Error", Content = ex.Message, CloseButtonText = "ok" }; ContentDialogResult result = await dialog.ShowAsync(); } } catch (Exception ex) { ContentDialog dialog = new ContentDialog { Title = "Error", Content = ex.Message, CloseButtonText = "ok" }; ContentDialogResult result = await dialog.ShowAsync(); } }