Re: Issue with contracts and assertions

2014-05-23 Thread Andre via Digitalmars-d-learn

Am 23.05.2014 16:44, schrieb Rene Zwanenburg:

On Friday, 23 May 2014 at 14:38:27 UTC, Andre wrote:

Am 23.05.2014 16:34, schrieb Rene Zwanenburg:
In case there is a reason that the assertion is not run,
if feels very dangerous for me that all assertions can be
disabled by mistake just by adding an interface to a class.

At least a compiler messsage should be thrown to warn about
"useless" assertions

Kind regards
André


I completely agree. A quick search on the issue tracker shows there are
some serious bugs involving in contracts and interfaces[0]. It's
probably best to keep away from them until the situation improves.

[0]:
https://issues.dlang.org/buglist.cgi?quicksearch=in%20contract%20interface


): I found my issue: https://issues.dlang.org/show_bug.cgi?id=12321

I just think about whether it is possible to build a contracts library
similiar to C4J (Contracts 4 Java).
I like the classed based approach.

Kind regards
André


Re: Issue with contracts and assertions

2014-05-23 Thread Rene Zwanenburg via Digitalmars-d-learn

On Friday, 23 May 2014 at 14:38:27 UTC, Andre wrote:

Am 23.05.2014 16:34, schrieb Rene Zwanenburg:
In case there is a reason that the assertion is not run,
if feels very dangerous for me that all assertions can be
disabled by mistake just by adding an interface to a class.

At least a compiler messsage should be thrown to warn about
"useless" assertions

Kind regards
André


I completely agree. A quick search on the issue tracker shows 
there are some serious bugs involving in contracts and 
interfaces[0]. It's probably best to keep away from them until 
the situation improves.


[0]: 
https://issues.dlang.org/buglist.cgi?quicksearch=in%20contract%20interface


Re: Issue with contracts and assertions

2014-05-23 Thread Andre via Digitalmars-d-learn

Am 23.05.2014 16:34, schrieb Rene Zwanenburg:

On Friday, 23 May 2014 at 13:45:07 UTC, Andre wrote:

Hi,

for the attached code I noticed some strange behaviors.
I compile the programm with: dmd main -unittest
The expected assertion of the method c pre condition is
not raised.
It is only raised if class A not implements interface I.

On the otherside the commented assertion in the invariant is working
fine.

Is this a bug?

Kind regards
André


interface I {
void c();
}

class A : I {
invariant() {
//assert(false, "Assert INVARIANT"); // Working
}

void c()
in {
assert(false, "Assert IN");
}
body {

}
}

unittest {
A a = new A();
a.c();
}

void main(){}


I'm not sure. An implementation shouldn't be allowed to have stricter
pre-conditions than it's base class or interface. On the other hand it
should be able to relax them.


In case there is a reason that the assertion is not run,
if feels very dangerous for me that all assertions can be
disabled by mistake just by adding an interface to a class.

At least a compiler messsage should be thrown to warn about
"useless" assertions

Kind regards
André



Re: Issue with contracts and assertions

2014-05-23 Thread Rene Zwanenburg via Digitalmars-d-learn

On Friday, 23 May 2014 at 13:45:07 UTC, Andre wrote:

Hi,

for the attached code I noticed some strange behaviors.
I compile the programm with: dmd main -unittest
The expected assertion of the method c pre condition is
not raised.
It is only raised if class A not implements interface I.

On the otherside the commented assertion in the invariant is 
working

fine.

Is this a bug?

Kind regards
André


interface I {
void c();
}

class A : I {
invariant() {
//assert(false, "Assert INVARIANT"); // Working
}

void c()
in {
assert(false, "Assert IN");
}
body {

}
}

unittest {
A a = new A();
a.c();
}

void main(){}


I'm not sure. An implementation shouldn't be allowed to have 
stricter pre-conditions than it's base class or interface. On the 
other hand it should be able to relax them.


Issue with contracts and assertions

2014-05-23 Thread Andre via Digitalmars-d-learn

Hi,

for the attached code I noticed some strange behaviors.
I compile the programm with: dmd main -unittest
The expected assertion of the method c pre condition is
not raised.
It is only raised if class A not implements interface I.

On the otherside the commented assertion in the invariant is working
fine.

Is this a bug?

Kind regards
André


interface I {
void c();
}

class A : I {
invariant() {
//assert(false, "Assert INVARIANT"); // Working
}

void c()
in {
assert(false, "Assert IN");
}
body {

}
}

unittest {
A a = new A();
a.c();
}

void main(){}