Created separate tests directory for D1.

This commit is contained in:
David Nadlinger
2012-08-29 11:16:42 +02:00
parent 837ef30fec
commit 1645eff596
27 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,136 @@
// Written in the D programming language
/*
* Authors:
* Walter Bright, Don Clugston
* Copyright:
* Copyright (c) 2001-2005 by Digital Mars,
* All Rights Reserved,
* www.digitalmars.com
* License:
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* <ul>
* <li> The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* </li>
* <li> Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
* </li>
* <li> This notice may not be removed or altered from any source
* distribution.
* </li>
* </ul>
*/
/* Cut down version for libtangobos-partial/dstress */
module tango.math.IEEE;
private:
/*
* The following IEEE 'real' formats are currently supported:
* 64 bit Big-endian 'double' (eg PowerPC)
* 128 bit Big-endian 'quadruple' (eg SPARC)
* 64 bit Little-endian 'double' (eg x86-SSE2)
* 80 bit Little-endian, with implied bit 'real80' (eg x87, Itanium).
* 128 bit Little-endian 'quadruple' (not implemented on any known processor!)
*
* Non-IEEE 128 bit Big-endian 'doubledouble' (eg PowerPC) has partial support
*/
version(LittleEndian) {
static assert(real.mant_dig == 53 || real.mant_dig==64
|| real.mant_dig == 113,
"Only 64-bit, 80-bit, and 128-bit reals"
" are supported for LittleEndian CPUs");
} else {
static assert(real.mant_dig == 53 || real.mant_dig==106
|| real.mant_dig == 113,
"Only 64-bit and 128-bit reals are supported for BigEndian CPUs."
" double-double reals have partial support");
}
// Constants used for extracting the components of the representation.
// They supplement the built-in floating point properties.
template floatTraits(T) {
// EXPMASK is a ushort mask to select the exponent portion (without sign)
// POW2MANTDIG = pow(2, real.mant_dig) is the value such that
// (smallest_denormal)*POW2MANTDIG == real.min
// EXPPOS_SHORT is the index of the exponent when represented as a ushort array.
// SIGNPOS_BYTE is the index of the sign when represented as a ubyte array.
static if (T.mant_dig == 24) { // float
const ushort EXPMASK = 0x7F80;
const ushort EXPBIAS = 0x3F00;
const uint EXPMASK_INT = 0x7F80_0000;
const uint MANTISSAMASK_INT = 0x007F_FFFF;
const real POW2MANTDIG = 0x1p+24;
version(LittleEndian) {
const EXPPOS_SHORT = 1;
} else {
const EXPPOS_SHORT = 0;
}
} else static if (T.mant_dig == 53) { // double, or real==double
const ushort EXPMASK = 0x7FF0;
const ushort EXPBIAS = 0x3FE0;
const uint EXPMASK_INT = 0x7FF0_0000;
const uint MANTISSAMASK_INT = 0x000F_FFFF; // for the MSB only
const real POW2MANTDIG = 0x1p+53;
version(LittleEndian) {
const EXPPOS_SHORT = 3;
const SIGNPOS_BYTE = 7;
} else {
const EXPPOS_SHORT = 0;
const SIGNPOS_BYTE = 0;
}
} else static if (T.mant_dig == 64) { // real80
const ushort EXPMASK = 0x7FFF;
const ushort EXPBIAS = 0x3FFE;
const real POW2MANTDIG = 0x1p+63;
version(LittleEndian) {
const EXPPOS_SHORT = 4;
const SIGNPOS_BYTE = 9;
} else {
const EXPPOS_SHORT = 0;
const SIGNPOS_BYTE = 0;
}
} else static if (real.mant_dig == 113){ // quadruple
const ushort EXPMASK = 0x7FFF;
const real POW2MANTDIG = 0x1p+113;
version(LittleEndian) {
const EXPPOS_SHORT = 7;
const SIGNPOS_BYTE = 15;
} else {
const EXPPOS_SHORT = 0;
const SIGNPOS_BYTE = 0;
}
} else static if (real.mant_dig == 106) { // doubledouble
const ushort EXPMASK = 0x7FF0;
const real POW2MANTDIG = 0x1p+53; // doubledouble denormals are strange
// and the exponent byte is not unique
version(LittleEndian) {
const EXPPOS_SHORT = 7; // [3] is also an exp short
const SIGNPOS_BYTE = 15;
} else {
const EXPPOS_SHORT = 0; // [4] is also an exp short
const SIGNPOS_BYTE = 0;
}
}
}
public:
/*********************************
* Return 1 if sign bit of e is set, 0 if not.
*/
int signbit(real x)
{
return ((cast(ubyte *)&x)[floatTraits!(real).SIGNPOS_BYTE] & 0x80) != 0;
}

View File

@@ -0,0 +1,10 @@
module std.compat;
extern (C) int printf(char *, ...);
alias char[] string;
alias wchar[] wstring;
alias dchar[] dstring;
alias Exception Error;
alias bool bit;

View File

@@ -0,0 +1,250 @@
/*
* Copyright (C) 1999-2006 by Digital Mars, www.digitalmars.com
* Written by Walter Bright
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* o The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* o Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
* o This notice may not be removed or altered from any source
* distribution.
*/
/**
* The garbage collector normally works behind the scenes without needing any
* specific interaction. These functions are for advanced applications that
* benefit from tuning the operation of the collector.
* Macros:
* WIKI=Phobos/StdGc
*/
module std.gc;
import tango.core.Memory;
/**
* Add p to list of roots. Roots are references to memory allocated by the
collector that are maintained in memory outside the collector pool. The garbage
collector will by default look for roots in the stacks of each thread, the
registers, and the default static data segment. If roots are held elsewhere,
use addRoot() or addRange() to tell the collector not to free the memory it
points to.
*/
void addRoot(void *p) // add p to list of roots
{
GC.addRoot(p);
}
/**
* Remove p from list of roots.
*/
void removeRoot(void *p) // remove p from list of roots
{
GC.removeRoot(p);
}
/**
* Add range to scan for roots.
*/
void addRange(void *pbot, void *ptop) // add range to scan for roots
{
GC.addRange(pbot, ptop-pbot);
}
/**
* Remove range.
*/
void removeRange(void *pbot) // remove range
{
GC.removeRange(pbot);
}
/**
* Mark a gc allocated block of memory as possibly containing pointers.
*/
void hasPointers(void* p)
{
GC.clrAttr(p, GC.BlkAttr.NO_SCAN);
}
/**
* Mark a gc allocated block of memory as definitely NOT containing pointers.
*/
void hasNoPointers(void* p)
{
GC.setAttr(p, GC.BlkAttr.NO_SCAN);
}
/**
* Mark a gc allocated block of memory pointed to by p as being populated with
* an array of TypeInfo ti (as many as will fit).
*/
//void setTypeInfo(TypeInfo ti, void* p);
/**
* Allocate nbytes of uninitialized data.
* The allocated memory will be scanned for pointers during
* a gc collection cycle, unless
* it is followed by a call to hasNoPointers().
*/
void[] malloc(size_t nbytes)
{
void* p = GC.malloc(nbytes);
if (p is null)
return null;
else
return p[0..nbytes];
}
/**
* Resize allocated memory block pointed to by p to be at least nbytes long.
* It will try to resize the memory block in place.
* If nbytes is 0, the memory block is free'd.
* If p is null, the memory block is allocated using malloc.
* The returned array may not be at the same location as the original
* memory block.
* The allocated memory will be scanned for pointers during
* a gc collection cycle, unless
* it is followed by a call to hasNoPointers().
*/
void[] realloc(void* p, size_t nbytes)
{
p = GC.realloc(p, nbytes);
if (p is null)
return null;
else
return p[0..nbytes];
}
/**
* Attempt to enlarge the memory block pointed to by p
* by at least minbytes beyond its current capacity,
* up to a maximum of maxbytes.
* Returns:
* 0 if could not extend p,
* total size of entire memory block if successful.
*/
size_t extend(void* p, size_t minbytes, size_t maxbytes)
{
return GC.extend(p, maxbytes, minbytes);
}
/**
* Returns capacity (size of the memory block) that p
* points to the beginning of.
* If p does not point into the gc memory pool, or does
* not point to the beginning of an allocated memory block,
* 0 is returned.
*/
size_t capacity(void* p)
{
return GC.sizeOf(p);
}
/**
* Set gc behavior to match that of 1.0.
*/
void setV1_0()
{
}
/***********************************
* Run a full garbage collection cycle.
*
* The collector normally runs synchronously with a storage allocation request
(i.e. it never happens when in code that does not allocate memory). In some
circumstances, for example when a particular task is finished, it is convenient
to explicitly run the collector and free up all memory used by that task. It
can also be helpful to run a collection before starting a new task that would
be annoying if it ran a collection in the middle of that task. Explicitly
running a collection can also be done in a separate very low priority thread,
so that if the program is idly waiting for input, memory can be cleaned up.
*/
void fullCollect()
{
GC.collect();
}
/***********************************
* Run a generational garbage collection cycle.
* Takes less time than a fullcollect(), but isn't
* as effective.
*/
void genCollect()
{
GC.collect();
}
//void genCollectNoStack();
/**
* Minimizes physical memory usage
*/
void minimize()
{
GC.collect();
}
/***************************************
* disable() temporarily disables garbage collection cycle, enable()
* then reenables them.
*
* This is used for brief time critical sections of code, so the amount of time
* it will take is predictable.
* If the collector runs out of memory while it is disabled, it will throw an
* std.outofmemory.OutOfMemoryException.
* The disable() function calls can be nested, but must be
* matched with corresponding enable() calls.
* By default collections are enabled.
*/
void disable()
{
GC.disable();
}
/**
* ditto
*/
void enable()
{
GC.enable();
}
//void getStats(out GCStats stats);
/***************************************
* Get handle to the collector.
*/
//void* getGCHandle();
/***************************************
* Set handle to the collector.
*/
//void setGCHandle(void* p);
//void endGCHandle();
/*
extern (C)
{
void gc_init();
void gc_term();
}
*/

View File

@@ -0,0 +1,11 @@
module std.outofmemory;
import std.compat;
public import tango.core.Exception;
extern (C) void _d_OutOfMemory()
{
throw cast(OutOfMemoryException)
cast(void *)
OutOfMemoryException.classinfo.init;
}

View File

@@ -0,0 +1,30 @@
/*
* Placed in public domain.
* Written by Hauke Duden and Walter Bright
*/
/* This is for use with variable argument lists with extern(D) linkage. */
module std.stdarg;
version(LDC)
{
public import ldc.vararg;
}
else
{
alias void* va_list;
template va_arg(T)
{
T va_arg(inout va_list _argptr)
{
T arg = *cast(T*)_argptr;
_argptr = _argptr + ((T.sizeof + int.sizeof - 1) & ~(int.sizeof - 1));
return arg;
}
}
}