Solved

Stream have diffrent size while debugging

Posted on 2009-07-01
1
266 Views
Last Modified: 2012-05-07
Hi,

I have a TestMethod to compare 2 streams using their bytes. here is part of the code (see code)

When debug this test then it pass, but when i just run it then i get the length differ fail assertion.

what is wrong in this code?
byte[] actual;
 byte[] expectedbytes;
 
using (MemoryStream actualstream = GenerateDocument(document, null, MpFunctionCode.NWPOF))
                {
                    actualstream.Position = 0;
                    actual = actualstream.ToArray();
                    actualstream.Close();
                }
 
using (Stream expected = typeof(GeneratorTest).Assembly.GetManifestResourceStream("Generator.UnitTests.resources.ExpectedOutput.pdf"))
            {
                expected.Position = 0;
                expectedbytes = WriteToByte(expected, (int)expected.Length);
                expected.Close();
            }
 
AssertEqual(actual, expectedbytes);
 
 
private static void AssertEqual(byte[] actual, byte[] expectedbytes)
        {
            if (actual.Length != expectedbytes.Length)
                Assert.Fail("Length differ:    Actual: " + actual.Length + "        Expected: " + expectedbytes.Length);
 
            for (int i = 0; i < expectedbytes.Length; i++)
            {
                if (expectedbytes[i] != actual[i])
                    Assert.Fail("Not the same: " + actual[i] + " " + expectedbytes[i] + " index: " + i);
            }
        }
 
 
private static byte[] WriteToByte(Stream stream, int initialLength)
        {
            stream.Position = 0;
            // If we've been passed an unhelpful initial length, just
            // use 32K.
            if (initialLength < 1)
            {
                initialLength = 32768;
            }
 
            byte[] buffer = new byte[initialLength];
            int read = 0;
 
            int chunk;
            while ((chunk = stream.Read(buffer, read, buffer.Length - read)) > 0)
            {
                read += chunk;
 
                // If we've reached the end of our buffer, check to see if there's
                // any more information
                if (read == buffer.Length)
                {
                    int nextByte = stream.ReadByte();
 
                    // End of stream? If so, we're done
                    if (nextByte == -1)
                    {
                        return buffer;
                    }
 
                    // Nope. Resize the buffer, put in the byte we've just
                    // read, and continue
                    byte[] newBuffer = new byte[buffer.Length * 2];
                    Array.Copy(buffer, newBuffer, buffer.Length);
                    newBuffer[read] = (byte)nextByte;
                    buffer = newBuffer;
                    read++;
                }
            }
            // Buffer is now too big. Shrink it.
            byte[] ret = new byte[read];
            Array.Copy(buffer, ret, read);
       
            return ret;
        }

Open in new window

0
Comment
Question by:kimos123
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
1 Comment
 

Accepted Solution

by:
kimos123 earned 0 total points
ID: 24761059
nvm delete this
0

Featured Post

Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
Come and listen to Percona CEO Peter Zaitsev discuss what’s new in Percona open source software, including Percona Server for MySQL (https://www.percona.com/software/mysql-database/percona-server) and MongoDB (https://www.percona.com/software/mongo-…
In this video, viewers are given an introduction to using the Windows 10 Snipping Tool, how to quickly locate it when it's needed and also how make it always available with a single click of a mouse button, by pinning it to the Desktop Task Bar. Int…

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question