Testing package proposed for Phobos

Walter Bright via Digitalmars-d digitalmars-d at puremagic.com
Tue Feb 10 14:45:15 PST 2015


To get things started, I created an InputRange and a function to test any 
InputRange. Compiling it:

     dmd inputrange -unittest -main -cov

shows 100% coverage.

-------------
struct InputRange(T : T[])
{
     this(T[] r)
     {
	this.r = r;
     }

     @property bool empty()
     {
	hasData = (r.length != 0);
	return !hasData;
     }

     @property T front()
     {
	assert(hasData);
	return r[0];
     }

     void popFront()
     {
	assert(hasData);
	r = r[1 .. $];
	hasData = false;
     }

   private:
     T[] r;
     bool hasData;
}

void testInputRange(R)(R r, int n)
{
     foreach (i; 0 .. n)
     {
	if (!r.empty)
	{
	    if (i & 1)
	    {
		auto e = r.front;
		auto e2 = r.front;
		assert(e == e2);
	    }
	    r.popFront();
	}
     }
}

unittest
{
     string s = "hello";
     auto r = InputRange!string(s);
     r.testInputRange(10);
}
-------------


More information about the Digitalmars-d mailing list