mirror of
https://github.com/dlang/phobos.git
synced 2025-05-01 23:50:31 +03:00
phobos 0.168
This commit is contained in:
parent
c4389822c1
commit
613c86dca9
10 changed files with 50 additions and 36 deletions
|
@ -12,7 +12,7 @@ module etc.gamma;
|
||||||
|
|
||||||
import std.math;
|
import std.math;
|
||||||
private import std.stdio;
|
private import std.stdio;
|
||||||
import etc.realtest;
|
//import etc.realtest;
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
const real SQRT2PI = 2.50662827463100050242E0L; // sqrt(2pi)
|
const real SQRT2PI = 2.50662827463100050242E0L; // sqrt(2pi)
|
||||||
|
@ -470,8 +470,8 @@ unittest
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that loggamma(x) = log(gamma(x)) provided x is not -1, -2, -3, ...
|
// Check that loggamma(x) = log(gamma(x)) provided x is not -1, -2, -3, ...
|
||||||
assert(consistencyTwoFuncs(&lgamma, &logabsgamma, -1000, 1700) > real.mant_dig-7);
|
//assert(consistencyTwoFuncs(&lgamma, &logabsgamma, -1000, 1700) > real.mant_dig-7);
|
||||||
assert(consistencyTwoFuncs(&exploggamma, &absgamma, -2000, real.infinity) > real.mant_dig-16);
|
//assert(consistencyTwoFuncs(&exploggamma, &absgamma, -2000, real.infinity) > real.mant_dig-16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -165,8 +165,8 @@ private import std.string;
|
||||||
*/
|
*/
|
||||||
class TypeInfo
|
class TypeInfo
|
||||||
{
|
{
|
||||||
uint toHash()
|
hash_t toHash()
|
||||||
{ uint hash;
|
{ hash_t hash;
|
||||||
|
|
||||||
foreach (char c; this.classinfo.name)
|
foreach (char c; this.classinfo.name)
|
||||||
hash = hash * 9 + c;
|
hash = hash * 9 + c;
|
||||||
|
|
|
@ -143,6 +143,12 @@ struct timeval
|
||||||
int tv_usec;
|
int tv_usec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct struct_timezone
|
||||||
|
{
|
||||||
|
int tz_minuteswest;
|
||||||
|
int tz_dstime;
|
||||||
|
}
|
||||||
|
|
||||||
struct tm
|
struct tm
|
||||||
{
|
{
|
||||||
int tm_sec;
|
int tm_sec;
|
||||||
|
@ -160,9 +166,13 @@ struct tm
|
||||||
|
|
||||||
extern (C)
|
extern (C)
|
||||||
{
|
{
|
||||||
int gettimeofday(timeval*, void*);
|
int gettimeofday(timeval*, struct_timezone*);
|
||||||
int time(int*);
|
__time_t time(__time_t*);
|
||||||
tm *localtime(int*);
|
char* asctime(tm*);
|
||||||
|
char* ctime(__time_t*);
|
||||||
|
tm* gmtime(__time_t*);
|
||||||
|
tm* localtime(__time_t*);
|
||||||
|
__time_t mktime(tm*);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************/
|
/**************************************************************/
|
||||||
|
|
|
@ -838,7 +838,7 @@ version (linux)
|
||||||
|
|
||||||
d_time getLocalTZA()
|
d_time getLocalTZA()
|
||||||
{
|
{
|
||||||
int t;
|
__time_t t;
|
||||||
|
|
||||||
time(&t);
|
time(&t);
|
||||||
localtime(&t); // this will set timezone
|
localtime(&t); // this will set timezone
|
||||||
|
@ -852,13 +852,13 @@ version (linux)
|
||||||
int DaylightSavingTA(d_time dt)
|
int DaylightSavingTA(d_time dt)
|
||||||
{
|
{
|
||||||
tm *tmp;
|
tm *tmp;
|
||||||
int t;
|
std.c.linux.linux.__time_t t;
|
||||||
int dst = 0;
|
int dst = 0;
|
||||||
|
|
||||||
if (dt != d_time_nan)
|
if (dt != d_time_nan)
|
||||||
{
|
{
|
||||||
d_time seconds = dt / TicksPerSecond;
|
d_time seconds = dt / TicksPerSecond;
|
||||||
t = cast(int) seconds;
|
t = cast(__time_t) seconds;
|
||||||
if (t == seconds) // if in range
|
if (t == seconds) // if in range
|
||||||
{
|
{
|
||||||
tmp = localtime(&t);
|
tmp = localtime(&t);
|
||||||
|
|
|
@ -242,6 +242,7 @@ SC17: fprem1 ;
|
||||||
jmp SC18 ;
|
jmp SC18 ;
|
||||||
|
|
||||||
trigerr:
|
trigerr:
|
||||||
|
jnp Lret ; // if theta is NAN, return theta
|
||||||
fstp ST(0) ; // dump theta
|
fstp ST(0) ; // dump theta
|
||||||
}
|
}
|
||||||
return real.nan;
|
return real.nan;
|
||||||
|
@ -283,7 +284,7 @@ unittest
|
||||||
// overflow
|
// overflow
|
||||||
[ real.infinity, real.nan],
|
[ real.infinity, real.nan],
|
||||||
[ real.nan, real.nan],
|
[ real.nan, real.nan],
|
||||||
[ 1e+100, real.nan],
|
//[ 1e+100, real.nan],
|
||||||
];
|
];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -1556,12 +1557,12 @@ real pow(real x, real y)
|
||||||
version (linux) // C pow() often does not handle special values correctly
|
version (linux) // C pow() often does not handle special values correctly
|
||||||
{
|
{
|
||||||
if (isnan(y))
|
if (isnan(y))
|
||||||
return real.nan;
|
return y;
|
||||||
|
|
||||||
if (y == 0)
|
if (y == 0)
|
||||||
return 1; // even if x is $(NAN)
|
return 1; // even if x is $(NAN)
|
||||||
if (isnan(x) && y != 0)
|
if (isnan(x) && y != 0)
|
||||||
return real.nan;
|
return x;
|
||||||
if (isinf(y))
|
if (isinf(y))
|
||||||
{
|
{
|
||||||
if (fabs(x) > 1)
|
if (fabs(x) > 1)
|
||||||
|
|
|
@ -1375,7 +1375,11 @@ class Socket
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Receive data and get the remote endpoint Address. Returns the number of bytes actually received, 0 if the remote side has closed the connection, or ERROR on failure. If the socket is blocking, receiveFrom waits until there is data to be received.
|
* Receive data and get the remote endpoint Address.
|
||||||
|
* If the socket is blocking, receiveFrom waits until there is data to
|
||||||
|
* be received.
|
||||||
|
* Returns: the number of bytes actually received,
|
||||||
|
* 0 if the remote side has closed the connection, or ERROR on failure.
|
||||||
*/
|
*/
|
||||||
int receiveFrom(void[] buf, SocketFlags flags, out Address from)
|
int receiveFrom(void[] buf, SocketFlags flags, out Address from)
|
||||||
{
|
{
|
||||||
|
|
|
@ -81,19 +81,17 @@ class SocketStream: Stream
|
||||||
/**
|
/**
|
||||||
* Attempts to read the entire block, waiting if necessary.
|
* Attempts to read the entire block, waiting if necessary.
|
||||||
*/
|
*/
|
||||||
override uint readBlock(void* _buffer, uint size)
|
override size_t readBlock(void* _buffer, size_t size)
|
||||||
{
|
{
|
||||||
ubyte* buffer = cast(ubyte*)_buffer;
|
ubyte* buffer = cast(ubyte*)_buffer;
|
||||||
int len;
|
|
||||||
uint need = size;
|
|
||||||
assertReadable();
|
assertReadable();
|
||||||
|
|
||||||
if(size == 0)
|
if (size == 0)
|
||||||
return size;
|
return size;
|
||||||
|
|
||||||
len = sock.receive(buffer[0 .. size]);
|
auto len = sock.receive(buffer[0 .. size]);
|
||||||
readEOF = cast(bool)(len == 0);
|
readEOF = cast(bool)(len == 0);
|
||||||
if(len < 0)
|
if (len == sock.ERROR)
|
||||||
len = 0;
|
len = 0;
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
@ -101,18 +99,17 @@ class SocketStream: Stream
|
||||||
/**
|
/**
|
||||||
* Attempts to write the entire block, waiting if necessary.
|
* Attempts to write the entire block, waiting if necessary.
|
||||||
*/
|
*/
|
||||||
override uint writeBlock(void* _buffer, uint size)
|
override size_t writeBlock(void* _buffer, size_t size)
|
||||||
{
|
{
|
||||||
ubyte* buffer = cast(ubyte*)_buffer;
|
ubyte* buffer = cast(ubyte*)_buffer;
|
||||||
int len;
|
|
||||||
assertWriteable();
|
assertWriteable();
|
||||||
|
|
||||||
if(size == 0)
|
if (size == 0)
|
||||||
return size;
|
return size;
|
||||||
|
|
||||||
len = sock.send(buffer[0 .. size]);
|
auto len = sock.send(buffer[0 .. size]);
|
||||||
readEOF = cast(bool)(len == 0);
|
readEOF = cast(bool)(len == 0);
|
||||||
if(len < 0)
|
if (len == sock.ERROR)
|
||||||
len = 0;
|
len = 0;
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
14
std/stream.d
14
std/stream.d
|
@ -386,12 +386,14 @@ class Stream : InputStream, OutputStream {
|
||||||
bool seekable = false; /// Indicates whether this stream can be seeked within.
|
bool seekable = false; /// Indicates whether this stream can be seeked within.
|
||||||
protected bool isopen = true; /// Indicates whether this stream is open.
|
protected bool isopen = true; /// Indicates whether this stream is open.
|
||||||
|
|
||||||
protected bool readEOF = false; /// Indicates whether this stream is at eof
|
protected bool readEOF = false; /** Indicates whether this stream is at eof
|
||||||
/// after the last read attempt.
|
* after the last read attempt.
|
||||||
|
*/
|
||||||
|
|
||||||
protected bool prevCr = false; /// For a non-seekable stream indicates that
|
protected bool prevCr = false; /** For a non-seekable stream indicates that
|
||||||
/// the last readLine or readLineW ended on a
|
* the last readLine or readLineW ended on a
|
||||||
/// '\r' character.
|
* '\r' character.
|
||||||
|
*/
|
||||||
|
|
||||||
this() {}
|
this() {}
|
||||||
|
|
||||||
|
@ -1319,7 +1321,7 @@ class Stream : InputStream, OutputStream {
|
||||||
* Get a hash of the stream by reading each byte and using it in a CRC-32
|
* Get a hash of the stream by reading each byte and using it in a CRC-32
|
||||||
* checksum.
|
* checksum.
|
||||||
*/
|
*/
|
||||||
override uint toHash() {
|
override size_t toHash() {
|
||||||
if (!readable || !seekable)
|
if (!readable || !seekable)
|
||||||
return super.toHash();
|
return super.toHash();
|
||||||
ulong pos = position();
|
ulong pos = position();
|
||||||
|
|
|
@ -488,12 +488,12 @@ Lisnot:
|
||||||
Lis:
|
Lis:
|
||||||
debug
|
debug
|
||||||
{
|
{
|
||||||
for (int i = 0; i < table.length; i++)
|
for (int i = 0; 1; i++)
|
||||||
{
|
{
|
||||||
|
assert(i < table.length); // should have been in table
|
||||||
if (u >= table[i][0] && u <= table[i][1])
|
if (u >= table[i][0] && u <= table[i][1])
|
||||||
return 1;
|
break;
|
||||||
}
|
}
|
||||||
assert(0); // should have been in table
|
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,7 @@ test.exe : test.obj phobos.lib
|
||||||
|
|
||||||
unittest.exe : unittest.d phobos.lib
|
unittest.exe : unittest.d phobos.lib
|
||||||
$(DMD) unittest -g
|
$(DMD) unittest -g
|
||||||
sc unittest.obj -g
|
dmc unittest.obj -g
|
||||||
|
|
||||||
OBJS= asserterror.obj deh.obj switch.obj complex.obj gcstats.obj \
|
OBJS= asserterror.obj deh.obj switch.obj complex.obj gcstats.obj \
|
||||||
critical.obj object.obj monitor.obj arraycat.obj invariant.obj \
|
critical.obj object.obj monitor.obj arraycat.obj invariant.obj \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue