[GSOC] regular expressions beta is here

Marco Leise Marco.Leise at gmx.de
Thu Aug 11 14:49:53 PDT 2011


Am 11.08.2011, 19:56 Uhr, schrieb Adam D. Ruppe  
<destructionator at gmail.com>:

> If it's worth anything, I use the out contracts in dom.d more as
> checked documentation than for serious bug-finding.
>
> For example:
>
> Element appendChild(Element newChild)
> out (ret) { assert(ret is newChild); }
> body { ... }
>
> I also use it from time to time to assert that a return value is not
> null. The check itself isn't particularly useful, but I think it's
> a nice bit of documentation.
>
> Actually, IMO, in and out contracts should be in the generated
> ddoc too.

I've been wondering for a while if selective unit tests could be included  
in DDOC somehow. Most of the 'examples' in the Phobos documentation look  
like they were taken right out of a unittest block blow the function. Like  
BinaryHeap in std.containers:

----------------------------------------------------------------------

DDOC:

// Example from "Introduction to Algorithms" Cormen et al, p 146
int[] a = [ 4, 1, 3, 2, 16, 9, 10, 14, 8, 7 ];
auto h = heapify(a);
// largest element
assert(h.front == 16);
// a has the heap property
assert(equal(a, [ 16, 14, 10, 9, 8, 7, 4, 3, 2, 1 ]));

----------------------------------------------------------------------

std/containers.d:

unittest
{
     {
         // example from "Introduction to Algorithms" Cormen et al., p 146
         int[] a = [ 4, 1, 3, 2, 16, 9, 10, 14, 8, 7 ];
         auto h = heapify(a);
         assert(h.front == 16);
         assert(a == [ 16, 14, 10, 8, 7, 9, 3, 2, 4, 1 ]);
         auto witness = [ 16, 14, 10, 9, 8, 7, 4, 3, 2, 1 ];
         for (; !h.empty; h.removeFront(), witness.popFront())
         {
             assert(!witness.empty);
             assert(witness.front == h.front);
         }
         assert(witness.empty);
     }
     {
         int[] a = [ 4, 1, 3, 2, 16, 9, 10, 14, 8, 7 ];
         int[] b = new int[a.length];
         BinaryHeap!(int[]) h = BinaryHeap!(int[])(b, 0);
         foreach (e; a)
         {
             h.insert(e);
         }
         assert(b == [ 16, 14, 10, 8, 7, 3, 9, 1, 4, 2 ], text(b));
     }
}

----------------------------------------------------------------------

bearophile, you are the expert with the DRY buzz word ;)


More information about the Digitalmars-d mailing list