|
| 1 | +using System; |
| 2 | +using System.Linq; |
| 3 | +using System.Text; |
| 4 | + |
| 5 | +using NUnit.Framework; |
| 6 | + |
| 7 | +namespace Blazer.Net.Tests |
| 8 | +{ |
| 9 | + [TestFixture] |
| 10 | + public class StreamEncoderTests |
| 11 | + { |
| 12 | + [Test] |
| 13 | + public void Test_AAAAAAAA() |
| 14 | + { |
| 15 | + var buf = new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 }; |
| 16 | + var len = IntegrityHelper.StreamEncoderCheckCompressDecompress(buf); |
| 17 | + // 1 times 1, then 7 times ref -1 |
| 18 | + Assert.That(len, Is.EqualTo(3)); |
| 19 | + } |
| 20 | + |
| 21 | + [Test] |
| 22 | + public void Test_AAAAAAAABBBBBBBB() |
| 23 | + { |
| 24 | + var buf = new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2 }; |
| 25 | + var len = IntegrityHelper.StreamEncoderCheckCompressDecompress(buf); |
| 26 | + Assert.That(len, Is.LessThanOrEqualTo(16)); |
| 27 | + } |
| 28 | + |
| 29 | + [Test] |
| 30 | + public void Test_1000A() |
| 31 | + { |
| 32 | + // byte 0: short backref, 1 lit, 15 repetitions |
| 33 | + // byte 1: backref 0 + 1 |
| 34 | + // byte 2: 254 repetitions + 2 byte |
| 35 | + // byte 3-4: 1d7 repetitions. 471 + 256 + 253 + 15 + 4 = 999 |
| 36 | + // 1F-00-FE-01-D7-01 (6) |
| 37 | + var buf = Enumerable.Range(0, 1000).Select(x => (byte)1).ToArray(); |
| 38 | + var len = IntegrityHelper.StreamEncoderCheckCompressDecompress(buf); |
| 39 | + // 1 times 1, then 7 times ref -1 |
| 40 | + Assert.That(len, Is.EqualTo(6)); |
| 41 | + } |
| 42 | + |
| 43 | + [Test] |
| 44 | + public void Test_ByteBorder_Repetitions() |
| 45 | + { |
| 46 | + for (var i = 250; i < 300; i++) |
| 47 | + { |
| 48 | + var buf = Enumerable.Range(0, i).Select(x => (byte)1).ToArray(); |
| 49 | + IntegrityHelper.StreamEncoderCheckCompressDecompress(buf); |
| 50 | + } |
| 51 | + |
| 52 | + for (var i = 65700; i < 65800; i++) |
| 53 | + { |
| 54 | + var buf = Enumerable.Range(0, i).Select(x => (byte)1).ToArray(); |
| 55 | + IntegrityHelper.StreamEncoderCheckCompressDecompress(buf); |
| 56 | + } |
| 57 | + } |
| 58 | + |
| 59 | + [Test] |
| 60 | + public void Test_HabaxHabax() |
| 61 | + { |
| 62 | + var buf = new byte[] { 2, 1, 3, 1, 4, 2, 1, 3, 1, 4 }; |
| 63 | + var len = IntegrityHelper.StreamEncoderCheckCompressDecompress(buf); |
| 64 | + Assert.That(len, Is.LessThan(8)); |
| 65 | + } |
| 66 | + |
| 67 | + [Test] |
| 68 | + public void Test_Cycle_20000_SemiRandom() |
| 69 | + { |
| 70 | + var r = new Random(12346); |
| 71 | + var buf = Enumerable.Range(0, 20000).Select(x => (byte)r.Next(2)).ToArray(); |
| 72 | + var len = IntegrityHelper.StreamEncoderCheckCompressDecompress(buf); |
| 73 | + // 1 times 1, then 7 times ref -1 |
| 74 | + Assert.That(len, Is.LessThan(20000)); |
| 75 | + } |
| 76 | + |
| 77 | + [Test] |
| 78 | + public void Test_Cycle_120000_SemiRandom() |
| 79 | + { |
| 80 | + var r = new Random(12346); |
| 81 | + var buf = Enumerable.Range(0, 120000).Select(x => (byte)r.Next(2)).ToArray(); |
| 82 | + var len = IntegrityHelper.StreamEncoderCheckCompressDecompress(buf); |
| 83 | + // 1 times 1, then 7 times ref -1 |
| 84 | + Assert.That(len, Is.LessThan(120000)); |
| 85 | + } |
| 86 | + |
| 87 | + [Test] |
| 88 | + public void Test_Text() |
| 89 | + { |
| 90 | + var buf = Encoding.GetEncoding(1251).GetBytes(@" |
| 91 | +Когда то давно Московское метро замышлялось как гигантское бомбоубежище, способное спасти десятки тысяч жизней. Мир стоял на пороге гибели, но тогда ее удалось отсрочить. Дорога, по которой идет человечество, вьется, как спираль, и однажды оно снова окажется на краю пропасти. Когда мир будет рушиться, метро окажется последним пристанищем человека перед тем, как он канет в ничто. |
| 92 | +— Кто это там? Эй, Артем! Глянь ка! |
| 93 | +Артем нехотя поднялся со своего места у костра и, перетягивая со спины на грудь автомат, двинулся во тьму. Стоя на самом краю освещенного пространства, он демонстративно, как можно громче и внушительней, щелкнул затвором и хрипло крикнул: — Стоять! Пароль!"); |
| 94 | + IntegrityHelper.StreamEncoderCheckCompressDecompress(buf); |
| 95 | + } |
| 96 | + } |
| 97 | +} |
0 commit comments