Can't recreate a range?

Casey noman at email.com
Wed Apr 29 20:43:20 UTC 2020


So, I'm trying to run some tests and I had code that looks 
similar to this:

unittest
{
         auto range = 
readStream(File("test_data/multiple.xml").byLine);
         int count = 0;
         while (!range.empty)
         {
                 count++;
                 range.popFront();
         }
         assert(count == 3);
}

However, if I have a second block above/below it doing the same 
thing, the last assert will fail because in the second block it 
appears the ranges have been joined together.  E.g.:

unittest
{
         auto range = 
readStream(File("test_data/multiple.xml").byLine);
         int count = 0;
         while (!range.empty)
         {
                 count++;
                 range.popFront();
         }
         assert(count == 3); // Passes
}

unittest
{
         auto range = 
readStream(File("test_data/another.xml").byLine);
         int count = 0;
         while (!range.empty)
         {
                 count++;
                 range.popFront();
         }
         assert(count == 2); // Fails
}

To me, it looks like range is not  being overwritten.  The code 
for readStream looks similar to this:

auto readStream(Range)(auto ref Range r) if 
(isInputRange!(Unqual!Range))
{
         struct StreamRange(Range)
         {
                 alias R = Unqual!Range;
                 R _input;

                 this(R input)
                 {
                         this._input = input;
                 }

                 bool empty()
                 {
                         return this._input.empty;
                 }

                 string front()
                 {
                         // Do stuff...
                 }

                 void popFront()
                 {
                 }
         }

         return StreamRange!(Range)(r);
}

I feel like I'm missing something obscure and it's driving me a 
bit batty.  Any clue as to why this is happening?  I'd like to 
not have to worry about creating new variable names between 
tests.  To me, it seems like each unittest block is independent 
of each other and I haven't come across anything that contradicts 
that.  However, I didn't find anything that confirms it either.

Thanks.


More information about the Digitalmars-d-learn mailing list