Re: How to replace the keyword nan to check the contract assert?

2015-03-20 Thread Ali Çehreli via Digitalmars-d-learn

On 03/20/2015 09:24 PM, Dennis Ritchie wrote: Hi,
 How do I replace double.init?

 import std.stdio : writeln;
 import std.algorithm : uninitializedFill;

 void main() {

  double[] arr = new double[6];
  uninitializedFill(arr[0 .. $ - 2], 3.25);
  writeln(arr);
  assert(arr == [3.25, 3.25, 3.25, 3.25, double.init, double.init]);
 /* not work */
 }

nan cannot be used in comparisons. It is neither greater than nor less 
than any value. You cannot even compare it against itself. nan==nan 
would always be false.


The solution is to call std.math.isNaN. In this case, you have to split 
the assert into two. You can achieve the same thing in may ways but the 
following works:


assert(arr[0 .. $ - 2] == [3.25, 3.25, 3.25, 3.25]);

import std.algorithm;
import std.math;
assert(arr[$ - 2 .. $].all!isNaN);

Ali



Re: How to replace the keyword nan to check the contract assert?

2015-03-20 Thread Dennis Ritchie via Digitalmars-d-learn

On Saturday, 21 March 2015 at 04:53:20 UTC, Ali Çehreli wrote:
nan cannot be used in comparisons. It is neither greater than 
nor less than any value. You cannot even compare it against 
itself. nan==nan would always be false.


The solution is to call std.math.isNaN. In this case, you have 
to split the assert into two. You can achieve the same thing in 
may ways but the following works:


assert(arr[0 .. $ - 2] == [3.25, 3.25, 3.25, 3.25]);

import std.algorithm;
import std.math;
assert(arr[$ - 2 .. $].all!isNaN);


Thanks.