digitalmars.D - DSpec / Templates + Delegates
- Ruun <ruunhb googlemail.com> Mar 30 2010
- Jacob Carlborg <doob me.com> Mar 30 2010
- bearophile <bearophileHUGS lycos.com> Mar 30 2010
- "Masahiro Nakagawa" <repeatedly gmail.com> Mar 30 2010
Hi everyone, for my coming projects i was searching for a BDD-Framework similar like Ruby/RSpec or Scala/ScalaTest. Unfortanetly, i didn't find either an implementation on dsource.org or something about here on the mailing list (Especially for D2). After looking into the old source of Tango-based DUnit, some postings here on the mailing list about assertions / unittests, i started a small try with Phobos D2 and i'm currently really amazed how clear the API can be by using templates + delegates + alias. If someone is interested, i recently hosted a project DSpec on dsource.org and provide an experimantel example there http://www.dsource.org/projects/dspec/ (Current source can be also found) I'm not sure if something similar is possible in D1 and honestly it's the first time i'm currently working with Templates in D so intensely. But after seeing such possibilities, i'm so impressed about D2. void each(alias array, T : T[] = typeof(array))(void delegate(T item) dg) { foreach(T i; array) dg(i); } int[] array = [1, 2, 3, 4]; int b = 10; each!(array) = (int item) { writefln("%d", item + b); }; This is almost looking like an iteration in Ruby and Scala! (I hope i'm not abusing the alias parameter in templates) Chris -- ruunhb googlemail.com http://ruuns.de/blog/
Mar 30 2010
On 3/30/10 13:58, Ruun wrote:Hi everyone, for my coming projects i was searching for a BDD-Framework similar like Ruby/RSpec or Scala/ScalaTest. Unfortanetly, i didn't find either an implementation on dsource.org or something about here on the mailing list (Especially for D2). After looking into the old source of Tango-based DUnit, some postings here on the mailing list about assertions / unittests, i started a small try with Phobos D2 and i'm currently really amazed how clear the API can be by using templates + delegates + alias. If someone is interested, i recently hosted a project DSpec on dsource.org and provide an experimantel example there http://www.dsource.org/projects/dspec/ (Current source can be also found) I'm not sure if something similar is possible in D1 and honestly it's the first time i'm currently working with Templates in D so intensely. But after seeing such possibilities, i'm so impressed about D2. void each(alias array, T : T[] = typeof(array))(void delegate(T item) dg) { foreach(T i; array) dg(i); } int[] array = [1, 2, 3, 4]; int b = 10; each!(array) = (int item) { writefln("%d", item + b); }; This is almost looking like an iteration in Ruby and Scala! (I hope i'm not abusing the alias parameter in templates) Chris
To make it look a little more like Ruby or Scala you change the each function to something like this, using some operator overload abuse: struct EachHelper (T) { T[] array; void opIn (void delegate (T item) dg) { foreach (i, array) dg(i); } } void each (T) (T[] array) { return EachHelper!(T)(array); } Then use it like this: int[] array = [1, 2, 3, 4]; int b = 10; array.each in (int item) { writefln("%d", item + b); }; The above code is the same as the following: each(array).opIn((int item) { writefln("%d", item + b); }); I think all the above code will work both in D1 and D2.
Mar 30 2010
Ruun:After looking into the old source of Tango-based DUnit, some postings here on the mailing list about assertions / unittests, i started a small try with Phobos D2 and i'm currently really amazed how clear the API can be by using templates + delegates + alias.
I think that follows the type-II solution (the worst one) I have explained here: http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=107997 (Thank you for your code and work, the worst solution is often better than no solution.) Bye, bearophile
Mar 30 2010
Hi, I read sources. I have something on my chest. - ruun package Umm...need? - import ruun.dspec.Spec; import ruun.dspec.Should; I think ruun.dspec.Spec should uses "public import" for Should module. Is there a case that spec empties in it! ? - Spec methods Why final? How can I create custom Spec? I expect the maturation of this project in a good direction. On Tue, 30 Mar 2010 20:58:39 +0900, Ruun <ruunhb googlemail.com> wrote:Hi everyone, for my coming projects i was searching for a BDD-Framework similar like Ruby/RSpec or Scala/ScalaTest. Unfortanetly, i didn't find either an implementation on dsource.org or something about here on the mailing list (Especially for D2). After looking into the old source of Tango-based DUnit, some postings here on the mailing list about assertions / unittests, i started a small try with Phobos D2 and i'm currently really amazed how clear the API can be by using templates + delegates + alias. If someone is interested, i recently hosted a project DSpec on dsource.org and provide an experimantel example there http://www.dsource.org/projects/dspec/ (Current source can be also found) I'm not sure if something similar is possible in D1 and honestly it's the first time i'm currently working with Templates in D so intensely. But after seeing such possibilities, i'm so impressed about D2. void each(alias array, T : T[] = typeof(array))(void delegate(T item) dg) { foreach(T i; array) dg(i); } int[] array = [1, 2, 3, 4]; int b = 10; each!(array) = (int item) { writefln("%d", item + b); }; This is almost looking like an iteration in Ruby and Scala! (I hope i'm not abusing the alias parameter in templates) Chris
Mar 30 2010









Jacob Carlborg <doob me.com> 