public void GetModeSmall() { var nabe = new Nabe(); for (var c = 'a'; c <= 'z'; c++) { Assert.Equal(Nabe.Block.Mode.Small, nabe.GetMode($"{c}")); } }
public void GetModeBase64() { var nabe = new Nabe(); for (var c = 'あ'; c <= 'ん'; c++) { Assert.Equal(Nabe.Block.Mode.Base64, nabe.GetMode($"{c}")); } }
public void GetModeBig() { var nabe = new Nabe(); for (var c = 'A'; c <= 'Z'; c++) { Assert.Equal(Nabe.Block.Mode.Big, nabe.GetMode($"{c}")); } }
public void GetModeSymbol() { var nabe = new Nabe(); foreach (var s in new[] { "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "[", "\\", "]", "^", "_", "`", "{", "|", "}", "~", " " }) { Assert.Equal(Nabe.Block.Mode.Symbol, nabe.GetMode(s)); } }
public void Test_Parse() { var data = new[] { new byte[] { 0x8F, 0xBA }, new byte[] { 0x90, 0x89 }, new byte[] { 0x90, 0x8A }, new byte[] { 0x8F, 0xBA, 0xdb, 0x40, 0xdd, 0x00 }, new byte[] { 0x90, 0x89, 0xdb, 0x40, 0xdd, 0x00 }, new byte[] { 0x90, 0x8A, 0xdb, 0x40, 0xdd, 0x00 } }; foreach (var b in data) { Assert.NotNull(Nabe.Parse(b)); } Assert.Throws <InvalidNabeFormatException>(() => Nabe.Parse(new byte[] { 0x1 })); Assert.Throws <InvalidNabeFormatException>(() => Nabe.Parse(System.Array.Empty <byte>())); }
/// <summary> /// デコード本体 /// </summary> /// <returns></returns> public IEnumerable <byte> Decode() { var nextMod = 0; var stack = new Stack <int>(); var encoding = new UnicodeEncoding(true, false); while (stream.Peek() > 0) { for (var item = StringInfo.GetTextElementEnumerator(stream.ReadLine() ?? string.Empty); item.MoveNext();) { var bytes = encoding.GetBytes(item.GetTextElement()); var nextNabe = Nabe.Parse(bytes.AsSpan()); if (nextNabe.Position is null) { if (stack.Any()) { yield return((byte)Aggregate(stack, nextMod)); } nextMod = (int)nextNabe.Base; } else { stack.Push(Wbase59.ToValue(nextNabe)); } } if (!stack.Any()) { continue; } yield return((byte)Aggregate(stack, nextMod)); } }