July 13, 2010
Vote++.  What made it hit home for me was when I was unittesting some code where the unittests can't be completely deterministic and thus print out lots of crap for human interpretation.  (When unittesting random number generators or stress testing a parallelization lib this can be a necessary evil IMHO).  In these cases it's easy for a single assert failure to go unnoticed.

On the other hand, I guess we could start using enforce() instead of
assert() in unittests if we prefer the old behavior.

On Tue, Jul 13, 2010 at 10:57 AM, Andrei Alexandrescu <andrei at erdani.com>wrote:

> Walter, Sean - I'm asking again, please bring unittests back where they were. The recent change to assert() semantics has cause a net pessimization of everyone's efficiency.
>
> Thanks,
>
> Andrei
>
>
> On 07/13/2010 07:09 AM, Lars Tandle Kyllingstad wrote:
>
>> I'm using Linux too, and DMD 2.047.  I've investigated this some more. Compilation of the std.container unittests succeeds, but the executable generated/posix/debug/unittest/std/container terminates with exit status 1.  Its main() function never runs.
>>
>> -Lars
>>
>>
>> On Mon, 2010-07-12 at 09:18 -0500, Andrei Alexandrescu wrote:
>>
>>> Can't reproduce on Linux.
>>>
>>> Andrei
>>>
>>> On 07/12/2010 08:55 AM, Lars Tandle Kyllingstad wrote:
>>>
>>>> When running 'make unittest' on the latest revision of Phobos, it just fails on/after std.container, without any sensible error message:
>>>>
>>>> Testing generated/posix/debug/unittest/std/container
>>>> make[1]: *** [generated/posix/debug/unittest/std/container] Error 1
>>>> make: *** [unittest] Error 2
>>>>
>>>> Anyone else seeing this?
>>>>
>>>> -Lars
>>>>
>>>> _______________________________________________
>>>> phobos mailing list
>>>> phobos at puremagic.com
>>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>>>
>>>
>>
>> _______________________________________________
>> phobos mailing list
>> phobos at puremagic.com
>> http://lists.puremagic.com/mailman/listinfo/phobos
>>
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/phobos/attachments/20100713/fe482858/attachment.html>
July 13, 2010
>From: David Simcha <dsimcha at gmail.com>
>Vote++.  What made it hit home for me was when I was unittesting some code where
>
>the unittests can't be completely deterministic and thus print out lots of crap

>for human interpretation.  (When unittesting random number generators or stress

>testing a parallelization lib this can be a necessary evil IMHO).  In these cases it's easy for a single assert failure to go unnoticed.
>
>On the other hand, I guess we could start using enforce() instead of assert() in
>
>unittests if we prefer the old behavior.

Unless you rely on asserts in functions that you call...

But in order for unittests to make sense, you need three things:

1. only failures print out.
2. a unit test stops after a failure occurs.
3. the program does not run main() and returns a non-zero error code if a
unittest fails.

An optional feature is that when a unit test fails, the next unit test runs. The unit test that has a failure should *NOT* continue to run, as it does now. Basing tests on invalid state, so basically only the first assert in a unit test is valid is a recipe for annoyance.

The expectation is that unit tests should be passing.  If you screw something up, a small number of unit tests will start failing, so there is little danger of you missing them.

I don't share your view of "losing data" if you are printing extra data during unit tests, you can easily pipe the results to a file, and search for the first assert.  If you are not doing this, I don't really know why you would be printing out so much data in the first place.  In fact, I'd argue that unit testing in this way is not a good idea.  Unit tests should not be printing anything, if you need to "print debug," you should use a separate program.

-Steve




July 13, 2010
The changes I made to unittest worked when released in 2.044. They were subsequently rewritten and broken so that unittests never failed. I reverted the changes back to the 2.044 version. The current behavior is as in 2.044, where failing asserts inside a unittest block set a global flag, and then when all unittests are complete, if the global flag is set, the program exits with an error status.

Andrei Alexandrescu wrote:
> There are other problems with the current approach, which make it a net pessimization:
>
> 1. assert() has different semantics at top level (straight inside the unittest) vs. everywhere else (e.g. in functions called by the unittest). That sucks.
>
> 2. assert() does not abort the current unittest. It continues soldering on, even though code insite a given unittest commonly assumes that continued execution implies success of the previous asserts.
>
> I protested when Walter introduced this disastrous semantics. He said, "let's let it be for a while and see how it fares." Now "a while" has passed. The feature fared badly. It is worse than before.
>
> By this I kindly ask that either things are improved by fixing both 1 and 2 above, or the old semantics are enacted.
>
> Walter, I understand you don't routinely test Phobos. Please also understand that I test Phobos all the time. You are making my and others' life difficult for no good reason.
>
>
> Andrei
>
> On 07/13/2010 10:13 AM, Steve Schveighoffer wrote:
>> isn't this just a bug?  I don't think the original unit test mode
>> (where any
>> assert ends the whole program, with no stack trace) is a step forward.
>>
>> Can't we just fix the bugs?
>>
>> -Steve
>>
>>
>>
>>
>> ----- Original Message ----
>>> From: Andrei Alexandrescu<andrei at erdani.com>
>>> To: Discuss the phobos library for D<phobos at puremagic.com>
>>> Sent: Tue, July 13, 2010 10:57:24 AM
>>> Subject: Re: [phobos] Silent failure of std.container unittests
>>>
>>> Walter, Sean - I'm asking again, please bring unittests back where they were. The recent change to assert() semantics has cause a net pessimization of everyone's  efficiency.
>>>
>>> Thanks,
>>>
>>> Andrei
>>>
>>> On 07/13/2010 07:09 AM, Lars  Tandle Kyllingstad wrote:
>>>> I'm using Linux too, and DMD 2.047.  I've  investigated this some
>>>> more.
>>>> Compilation of the std.container unittests  succeeds, but the
>>>> executable
>>>>   generated/posix/debug/unittest/std/container terminates with exit
>>>> status
>>>>   1.  Its main() function never runs.
>>>>
>>>>   -Lars
>>>>
>>>>
>>>> On Mon, 2010-07-12 at 09:18 -0500, Andrei  Alexandrescu wrote:
>>>>> Can't reproduce on  Linux.
>>>>>
>>>>> Andrei
>>>>>
>>>>> On 07/12/2010  08:55 AM, Lars Tandle Kyllingstad wrote:
>>>>>> When running 'make  unittest' on the latest revision of Phobos,
>>>>>> it just
>>>>>> fails  on/after std.container, without any sensible error  message:
>>>>>>
>>>>>> Testing  generated/posix/debug/unittest/std/container
>>>>>> make[1]: ***  [generated/posix/debug/unittest/std/container] Error 1
>>>>>> make: ***  [unittest] Error 2
>>>>>>
>>>>>> Anyone else seeing  this?
>>>>>>
>>>>>> -Lars
>>>>>>
>>>>>>   _______________________________________________
>>>>>> phobos mailing  list
>>>>>> phobos at puremagic.com
>>>>>>   http://lists.puremagic.com/mailman/listinfo/phobos
>>>>
>>>>
>>>>   _______________________________________________
>>>> phobos mailing  list
>>>> phobos at puremagic.com
>>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>> _______________________________________________
>>> phobos  mailing list
>>> phobos at puremagic.com
>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>>
>>
>>
>>
>> _______________________________________________
>> phobos mailing list
>> phobos at puremagic.com
>> http://lists.puremagic.com/mailman/listinfo/phobos
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos
>
>
July 13, 2010

Sean Kelly wrote:
> If a unittest throws an exception the test is marked as failed and you'll see an errorlevel 1 after the tests complete.

I saw the code that did that, but unfortunately, it does not work. I put the old way back in.

>  I didn't report the exception because unittest output is often parsed to accumulate results, but this could easily be changed.
>
> Sent from my iPhone
>
> On Jul 12, 2010, at 6:55 AM, Lars Tandle Kyllingstad <lars at kyllingen.net> wrote:
>
> 
>> When running 'make unittest' on the latest revision of Phobos, it just fails on/after std.container, without any sensible error message:
>>
>> Testing generated/posix/debug/unittest/std/container
>> make[1]: *** [generated/posix/debug/unittest/std/container] Error 1
>> make: *** [unittest] Error 2
>>
>> Anyone else seeing this?
>>
>> -Lars
>>
>> _______________________________________________
>> phobos mailing list
>> phobos at puremagic.com
>> http://lists.puremagic.com/mailman/listinfo/phobos
>> 
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos
>
>
> 
July 13, 2010
On 07/13/2010 02:11 PM, Walter Bright wrote:
> The changes I made to unittest worked when released in 2.044. They were subsequently rewritten and broken so that unittests never failed. I reverted the changes back to the 2.044 version. The current behavior is as in 2.044, where failing asserts inside a unittest block set a global flag, and then when all unittests are complete, if the global flag is set, the program exits with an error status.

I'm not sure where the discussion leaves us, but at the end of the day we're in the following situation:

1. I just svn up'ed a minute ago and built dmd. It shows version 2.048.

2. This program:

unittest
{
     int x = printf("inside unittest\n");
     assert(x == 100000);
}

void main(string args[])
{
     writeln("inside main");
}

prints this:

inside unittest
test(7): unittest failure
inside main

and exits with error code zero.

Please advise.


Andrei
July 13, 2010
Hm... I think this can be fixed with a library change. I'll look into it tonight.

Sent from my iPhone

On Jul 13, 2010, at 8:24 AM, Andrei Alexandrescu <andrei at erdani.com> wrote:

> There are other problems with the current approach, which make it a net pessimization:
> 
> 1. assert() has different semantics at top level (straight inside the unittest) vs. everywhere else (e.g. in functions called by the unittest). That sucks.
> 
> 2. assert() does not abort the current unittest. It continues soldering on, even though code insite a given unittest commonly assumes that continued execution implies success of the previous asserts.
> 
> I protested when Walter introduced this disastrous semantics. He said, "let's let it be for a while and see how it fares." Now "a while" has passed. The feature fared badly. It is worse than before.
> 
> By this I kindly ask that either things are improved by fixing both 1 and 2 above, or the old semantics are enacted.
> 
> Walter, I understand you don't routinely test Phobos. Please also understand that I test Phobos all the time. You are making my and others' life difficult for no good reason.
> 
> 
> Andrei
> 
> On 07/13/2010 10:13 AM, Steve Schveighoffer wrote:
>> isn't this just a bug?  I don't think the original unit test mode (where any assert ends the whole program, with no stack trace) is a step forward.
>> 
>> Can't we just fix the bugs?
>> 
>> -Steve
>> 
>> 
>> 
>> 
>> ----- Original Message ----
>>> From: Andrei Alexandrescu<andrei at erdani.com>
>>> To: Discuss the phobos library for D<phobos at puremagic.com>
>>> Sent: Tue, July 13, 2010 10:57:24 AM
>>> Subject: Re: [phobos] Silent failure of std.container unittests
>>> 
>>> Walter, Sean - I'm asking again, please bring unittests back where they were. The recent change to assert() semantics has cause a net pessimization of everyone's  efficiency.
>>> 
>>> Thanks,
>>> 
>>> Andrei
>>> 
>>> On 07/13/2010 07:09 AM, Lars  Tandle Kyllingstad wrote:
>>>> I'm using Linux too, and DMD 2.047.  I've  investigated this some more.
>>>> Compilation of the std.container unittests  succeeds, but the executable
>>>>  generated/posix/debug/unittest/std/container terminates with exit status
>>>>  1.  Its main() function never runs.
>>>> 
>>>>  -Lars
>>>> 
>>>> 
>>>> On Mon, 2010-07-12 at 09:18 -0500, Andrei  Alexandrescu wrote:
>>>>> Can't reproduce on  Linux.
>>>>> 
>>>>> Andrei
>>>>> 
>>>>> On 07/12/2010  08:55 AM, Lars Tandle Kyllingstad wrote:
>>>>>> When running 'make  unittest' on the latest revision of Phobos, it just fails  on/after std.container, without any sensible error  message:
>>>>>> 
>>>>>> Testing  generated/posix/debug/unittest/std/container
>>>>>> make[1]: ***  [generated/posix/debug/unittest/std/container] Error 1
>>>>>> make: ***  [unittest] Error 2
>>>>>> 
>>>>>> Anyone else seeing  this?
>>>>>> 
>>>>>> -Lars
>>>>>> 
>>>>>>  _______________________________________________
>>>>>> phobos mailing  list
>>>>>> phobos at puremagic.com
>>>>>>  http://lists.puremagic.com/mailman/listinfo/phobos
>>>> 
>>>> 
>>>>  _______________________________________________
>>>> phobos mailing  list
>>>> phobos at puremagic.com
>>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>> _______________________________________________
>>> phobos  mailing list
>>> phobos at puremagic.com
>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>> 
>> 
>> 
>> 
>> _______________________________________________
>> phobos mailing list
>> phobos at puremagic.com
>> http://lists.puremagic.com/mailman/listinfo/phobos
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos
July 13, 2010
Can't we just ditch the non-throwing asserts?

Sent from my iPhone

On Jul 13, 2010, at 12:11 PM, Walter Bright <walter at digitalmars.com> wrote:

> The changes I made to unittest worked when released in 2.044. They were subsequently rewritten and broken so that unittests never failed. I reverted the changes back to the 2.044 version. The current behavior is as in 2.044, where failing asserts inside a unittest block set a global flag, and then when all unittests are complete, if the global flag is set, the program exits with an error status.
> 
> Andrei Alexandrescu wrote:
>> There are other problems with the current approach, which make it a net pessimization:
>> 
>> 1. assert() has different semantics at top level (straight inside the unittest) vs. everywhere else (e.g. in functions called by the unittest). That sucks.
>> 
>> 2. assert() does not abort the current unittest. It continues soldering on, even though code insite a given unittest commonly assumes that continued execution implies success of the previous asserts.
>> 
>> I protested when Walter introduced this disastrous semantics. He said, "let's let it be for a while and see how it fares." Now "a while" has passed. The feature fared badly. It is worse than before.
>> 
>> By this I kindly ask that either things are improved by fixing both 1 and 2 above, or the old semantics are enacted.
>> 
>> Walter, I understand you don't routinely test Phobos. Please also understand that I test Phobos all the time. You are making my and others' life difficult for no good reason.
>> 
>> 
>> Andrei
>> 
>> On 07/13/2010 10:13 AM, Steve Schveighoffer wrote:
>>> isn't this just a bug?  I don't think the original unit test mode (where any assert ends the whole program, with no stack trace) is a step forward.
>>> 
>>> Can't we just fix the bugs?
>>> 
>>> -Steve
>>> 
>>> 
>>> 
>>> 
>>> ----- Original Message ----
>>>> From: Andrei Alexandrescu<andrei at erdani.com>
>>>> To: Discuss the phobos library for D<phobos at puremagic.com>
>>>> Sent: Tue, July 13, 2010 10:57:24 AM
>>>> Subject: Re: [phobos] Silent failure of std.container unittests
>>>> 
>>>> Walter, Sean - I'm asking again, please bring unittests back where they were. The recent change to assert() semantics has cause a net pessimization of everyone's  efficiency.
>>>> 
>>>> Thanks,
>>>> 
>>>> Andrei
>>>> 
>>>> On 07/13/2010 07:09 AM, Lars  Tandle Kyllingstad wrote:
>>>>> I'm using Linux too, and DMD 2.047.  I've  investigated this some more.
>>>>> Compilation of the std.container unittests  succeeds, but the executable
>>>>>  generated/posix/debug/unittest/std/container terminates with exit status
>>>>>  1.  Its main() function never runs.
>>>>> 
>>>>>  -Lars
>>>>> 
>>>>> 
>>>>> On Mon, 2010-07-12 at 09:18 -0500, Andrei  Alexandrescu wrote:
>>>>>> Can't reproduce on  Linux.
>>>>>> 
>>>>>> Andrei
>>>>>> 
>>>>>> On 07/12/2010  08:55 AM, Lars Tandle Kyllingstad wrote:
>>>>>>> When running 'make  unittest' on the latest revision of Phobos, it just fails  on/after std.container, without any sensible error  message:
>>>>>>> 
>>>>>>> Testing  generated/posix/debug/unittest/std/container
>>>>>>> make[1]: ***  [generated/posix/debug/unittest/std/container] Error 1
>>>>>>> make: ***  [unittest] Error 2
>>>>>>> 
>>>>>>> Anyone else seeing  this?
>>>>>>> 
>>>>>>> -Lars
>>>>>>> 
>>>>>>>  _______________________________________________
>>>>>>> phobos mailing  list
>>>>>>> phobos at puremagic.com
>>>>>>>  http://lists.puremagic.com/mailman/listinfo/phobos
>>>>> 
>>>>> 
>>>>>  _______________________________________________
>>>>> phobos mailing  list
>>>>> phobos at puremagic.com
>>>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>>> _______________________________________________
>>>> phobos  mailing list
>>>> phobos at puremagic.com
>>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>>> 
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> phobos mailing list
>>> phobos at puremagic.com
>>> http://lists.puremagic.com/mailman/listinfo/phobos
>> _______________________________________________
>> phobos mailing list
>> phobos at puremagic.com
>> http://lists.puremagic.com/mailman/listinfo/phobos
>> 
>> 
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos
July 13, 2010
It doesn't work because assert doesn't throw no consider that token behavior.

Sent from my iPhone

On Jul 13, 2010, at 12:13 PM, Walter Bright <walter at digitalmars.com> wrote:

> 
> 
> Sean Kelly wrote:
>> If a unittest throws an exception the test is marked as failed and you'll see an errorlevel 1 after the tests complete.
> 
> I saw the code that did that, but unfortunately, it does not work. I put the old way back in.
> 
>> I didn't report the exception because unittest output is often parsed to accumulate results, but this could easily be changed. Sent from my iPhone
>> 
>> On Jul 12, 2010, at 6:55 AM, Lars Tandle Kyllingstad <lars at kyllingen.net> wrote:
>> 
>> 
>>> When running 'make unittest' on the latest revision of Phobos, it just fails on/after std.container, without any sensible error message:
>>> 
>>> Testing generated/posix/debug/unittest/std/container
>>> make[1]: *** [generated/posix/debug/unittest/std/container] Error 1
>>> make: *** [unittest] Error 2
>>> 
>>> Anyone else seeing this?
>>> 
>>> -Lars
>>> 
>>> _______________________________________________
>>> phobos mailing list
>>> phobos at puremagic.com
>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>> 
>> _______________________________________________
>> phobos mailing list
>> phobos at puremagic.com
>> http://lists.puremagic.com/mailman/listinfo/phobos
>> 
>> 
>> 
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos
July 13, 2010
On 07/13/2010 07:10 PM, Sean Kelly wrote:
> Can't we just ditch the non-throwing asserts?

Yes please.

Andrei
July 13, 2010
I received a litany of complaints about them.

Sean Kelly wrote:
> Can't we just ditch the non-throwing asserts?
>
> Sent from my iPhone
>
> On Jul 13, 2010, at 12:11 PM, Walter Bright <walter at digitalmars.com> wrote:
>
> 
>> The changes I made to unittest worked when released in 2.044. They were subsequently rewritten and broken so that unittests never failed. I reverted the changes back to the 2.044 version. The current behavior is as in 2.044, where failing asserts inside a unittest block set a global flag, and then when all unittests are complete, if the global flag is set, the program exits with an error status.
>>
>> Andrei Alexandrescu wrote:
>> 
>>> There are other problems with the current approach, which make it a net pessimization:
>>>
>>> 1. assert() has different semantics at top level (straight inside the unittest) vs. everywhere else (e.g. in functions called by the unittest). That sucks.
>>>
>>> 2. assert() does not abort the current unittest. It continues soldering on, even though code insite a given unittest commonly assumes that continued execution implies success of the previous asserts.
>>>
>>> I protested when Walter introduced this disastrous semantics. He said, "let's let it be for a while and see how it fares." Now "a while" has passed. The feature fared badly. It is worse than before.
>>>
>>> By this I kindly ask that either things are improved by fixing both 1 and 2 above, or the old semantics are enacted.
>>>
>>> Walter, I understand you don't routinely test Phobos. Please also understand that I test Phobos all the time. You are making my and others' life difficult for no good reason.
>>>
>>>
>>> Andrei
>>>
>>> On 07/13/2010 10:13 AM, Steve Schveighoffer wrote:
>>> 
>>>> isn't this just a bug?  I don't think the original unit test mode (where any assert ends the whole program, with no stack trace) is a step forward.
>>>>
>>>> Can't we just fix the bugs?
>>>>
>>>> -Steve
>>>>
>>>>
>>>>
>>>>
>>>> ----- Original Message ----
>>>> 
>>>>> From: Andrei Alexandrescu<andrei at erdani.com>
>>>>> To: Discuss the phobos library for D<phobos at puremagic.com>
>>>>> Sent: Tue, July 13, 2010 10:57:24 AM
>>>>> Subject: Re: [phobos] Silent failure of std.container unittests
>>>>>
>>>>> Walter, Sean - I'm asking again, please bring unittests back where they were. The recent change to assert() semantics has cause a net pessimization of everyone's  efficiency.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Andrei
>>>>>
>>>>> On 07/13/2010 07:09 AM, Lars  Tandle Kyllingstad wrote:
>>>>> 
>>>>>> I'm using Linux too, and DMD 2.047.  I've  investigated this some more.
>>>>>> Compilation of the std.container unittests  succeeds, but the executable
>>>>>>  generated/posix/debug/unittest/std/container terminates with exit status
>>>>>>  1.  Its main() function never runs.
>>>>>>
>>>>>>  -Lars
>>>>>>
>>>>>>
>>>>>> On Mon, 2010-07-12 at 09:18 -0500, Andrei  Alexandrescu wrote:
>>>>>> 
>>>>>>> Can't reproduce on  Linux.
>>>>>>>
>>>>>>> Andrei
>>>>>>>
>>>>>>> On 07/12/2010  08:55 AM, Lars Tandle Kyllingstad wrote:
>>>>>>> 
>>>>>>>> When running 'make  unittest' on the latest revision of Phobos, it just fails  on/after std.container, without any sensible error  message:
>>>>>>>>
>>>>>>>> Testing  generated/posix/debug/unittest/std/container
>>>>>>>> make[1]: ***  [generated/posix/debug/unittest/std/container] Error 1
>>>>>>>> make: ***  [unittest] Error 2
>>>>>>>>
>>>>>>>> Anyone else seeing  this?
>>>>>>>>
>>>>>>>> -Lars
>>>>>>>>
>>>>>>>>  _______________________________________________
>>>>>>>> phobos mailing  list
>>>>>>>> phobos at puremagic.com
>>>>>>>>  http://lists.puremagic.com/mailman/listinfo/phobos
>>>>>>>> 
>>>>>>  _______________________________________________
>>>>>> phobos mailing  list
>>>>>> phobos at puremagic.com
>>>>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>>>>> 
>>>>> _______________________________________________
>>>>> phobos  mailing list
>>>>> phobos at puremagic.com
>>>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>>>>
>>>>> 
>>>>
>>>> _______________________________________________
>>>> phobos mailing list
>>>> phobos at puremagic.com
>>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>>> 
>>> _______________________________________________
>>> phobos mailing list
>>> phobos at puremagic.com
>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>>
>>>
>>> 
>> _______________________________________________
>> phobos mailing list
>> phobos at puremagic.com
>> http://lists.puremagic.com/mailman/listinfo/phobos
>> 
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos
>
>
>