On Thursday, 31 July 2014 at 07:00:01 UTC, Walter Bright wrote:
On 7/30/2014 10:49 PM, Tofu Ninja wrote:
On Thursday, 31 July 2014 at 05:05:33 UTC, Walter Bright wrote:
On 7/30/2014 8:09 PM, Tofu Ninja wrote:
When is the appropriate time to use an assert? If an assert
should not be used on input, then any thing that can't be
statically known is considered an input and anything that is
derived from an input is also an input... so when can we use an assert? The only things left it seems are things know at compile
time and at that point what is the the point of having assert
when we have static assert...

Asserts are used to verify the logic of your code is correct:

  x = y + y;
  assert(x == 2 * y);

If x and y are floats and y is nan then that assert will fail..... That assert is implicitly verifying that the input y is not nan,
that is a misuse of assert by your definition.

If it pleases you, prepend int x,y; to the snippet.


Any assert made on a piece of data that is derived from inputs is verifying some aspect of that input, which is a misuse of assert
according to the current definition. So I still state that
according to current definitions, assert should only be used on
things that are known at compile time. What is the use of that?

For example, you can have a sort function, and then at the end assert that the output of the function is sorted.

But that is verifying that the input is sort-able....

All I am saying is that the idea that assert should not be used to verify input makes no sense at all. Every program takes in input and once a little bit is in, anything derived from that input is also input.

...

Also this thread has made me firmly never want to trust assert again... I have actually been going though my projects and removing them now because I don't trust them any more...

Reply via email to