public async Task <bool> RunAsync()
        {
            bool result = true;

            {
                byte[] buffer = Encoding.UTF8.GetBytes("hello world");

                MemoryStream memory_stream = new MemoryStream();
                IInputStream input_stream  = new InputStream();
                memory_stream.Write(buffer, 0, buffer.Count());

                input_stream.Initialize(memory_stream);
                ICharacterStream cStream = new CharacterStream();
                cStream.Initialize(input_stream);

                ICharacter c1 = await cStream.Get();

                result = result && (null != c1); // ICharacterStream never returns null

                ICharacter ch = null;
                // verify that Get uses a pushed character
                cStream.Push(c1);
                ch = await cStream.Get();

                result = result && (c1.Info == ch.Info);

                while (ch.Kind != CharKind.NULL)
                {
                    ch = await cStream.Get();
                }
                ch = await cStream.Get(); // verify that Get() continues to get the NULL

                result = result && (ch.Kind == CharKind.NULL);
                memory_stream.Dispose();
            }
            {
                byte[]       buffer        = Encoding.UTF8.GetBytes("\n");
                MemoryStream memory_stream = new MemoryStream();
                IInputStream input_stream  = new InputStream();
                memory_stream.Write(buffer, 0, buffer.Count());

                input_stream.Initialize(memory_stream);
                ICharacterStream cStream = new CharacterStream();
                cStream.Initialize(input_stream);
                ICharacter ch = await cStream.Get();

                result = result && (ch.Kind == CharKind.CARRAGERETURN);
                ch     = await cStream.Get();

                result = result && (ch.Kind == CharKind.NULL);
                memory_stream.Dispose();
            }
            return(result);
        }