Add tests for ENTIER.

This commit is contained in:
David Brown 2016-09-13 19:44:01 +01:00
parent 516e261242
commit 68c105b48c
2 changed files with 31 additions and 10 deletions

View file

@ -144,15 +144,6 @@ static inline int64 __RF(uint64 i, uint64 ub) {if (i >= ub) {__HALT(-8);} return
// Run time system routines in SYSTEM.c
extern void SYSTEM_INHERIT(LONGINT *t, LONGINT *t0);
extern void SYSTEM_ENUMP (void *adr, LONGINT n, void (*P)());
extern void SYSTEM_ENUMR (void *adr, LONGINT *typ, LONGINT size, LONGINT n, void (*P)());
extern LONGINT SYSTEM_ENTIER (double x);
// Signal handling in SYSTEM.c // Signal handling in SYSTEM.c
#ifndef _WIN32 #ifndef _WIN32
@ -223,8 +214,9 @@ extern int64 SYSTEM_MOD(int64 x, int64 y);
#define __MOD(x, y) (((x)>0 && (y)>0) ? (x)%(y) : __MODF(x, y)) #define __MOD(x, y) (((x)>0 && (y)>0) ? (x)%(y) : __MODF(x, y))
extern LONGINT SYSTEM_ENTIER (double x);
#define __ENTIER(x) SYSTEM_ENTIER(x)
#define __ENTIER(x) SYSTEM_ENTIER(x)
#define __ABS(x) (((x)<0)?-(x):(x)) #define __ABS(x) (((x)<0)?-(x):(x))
@ -237,6 +229,7 @@ static inline double SYSTEM_ABSD(double i) {return i >= 0.0 ? i : -i;}
#define __CAP(ch) ((CHAR)((ch)&0x5f)) #define __CAP(ch) ((CHAR)((ch)&0x5f))
#define __ODD(x) ((x)&1) #define __ODD(x) ((x)&1)
#define __IN(x, s) ((x)>=0 && (x)<(8*sizeof(SET)) && ((((uSET)(s))>>(x))&1)) #define __IN(x, s) ((x)>=0 && (x)<(8*sizeof(SET)) && ((((uSET)(s))>>(x))&1))
#define __SETOF(x) ((SET)1<<(x)) #define __SETOF(x) ((SET)1<<(x))
#define __SETRNG(l, h) ((~(SET)0<<(l))&~(SET)0>>(8*sizeof(SET)-1-(h))) #define __SETRNG(l, h) ((~(SET)0<<(l))&~(SET)0>>(8*sizeof(SET)-1-(h)))
@ -297,6 +290,11 @@ extern SYSTEM_PTR SYSTEM_NEWARR(LONGINT*, LONGINT, int, int, int, ...);
/* Type handling */ /* Type handling */
extern void SYSTEM_INHERIT(LONGINT *t, LONGINT *t0);
extern void SYSTEM_ENUMP (void *adr, LONGINT n, void (*P)());
extern void SYSTEM_ENUMR (void *adr, LONGINT *typ, LONGINT size, LONGINT n, void (*P)());
#define __TDESC(t, m, n) \ #define __TDESC(t, m, n) \
static struct t##__desc { \ static struct t##__desc { \
LONGINT tproc[m]; /* Proc for each ptr field */ \ LONGINT tproc[m]; /* Proc for each ptr field */ \

View file

@ -2,6 +2,8 @@ MODULE TestLanguage;
IMPORT SYSTEM, Console; IMPORT SYSTEM, Console;
VAR gz: LONGREAL;
PROCEDURE TestShiftResult(of, by, actual, expected: LONGINT; msg: ARRAY OF CHAR); PROCEDURE TestShiftResult(of, by, actual, expected: LONGINT; msg: ARRAY OF CHAR);
BEGIN BEGIN
IF actual # expected THEN IF actual # expected THEN
@ -236,6 +238,26 @@ END Abs;
(* LR does nothing numerically, but is enough to stop the C compiler
optimizing away the LR assignment and ENTIER implementation. *)
PROCEDURE LR(lr: LONGREAL): LONGREAL; BEGIN RETURN lr + gz; END LR;
PROCEDURE Entier;
VAR lr: LONGREAL;
BEGIN
gz := 0.0;
lr := LR(-0.01); TestValue(ENTIER(lr), -1, "ENTIER(-0.01");
lr := LR( 0.00); TestValue(ENTIER(lr), 0, "ENTIER(0.00");
lr := LR( 5.00); TestValue(ENTIER(lr), 5, "ENTIER(5.00");
lr := LR( 5.50); TestValue(ENTIER(lr), 5, "ENTIER(5.50");
lr := LR( 5.99); TestValue(ENTIER(lr), 5, "ENTIER(5.99");
lr := LR(-5.00); TestValue(ENTIER(lr), -5, "ENTIER(-5.00");
lr := LR(-5.50); TestValue(ENTIER(lr), -6, "ENTIER(-5.50");
lr := LR(-5.99); TestValue(ENTIER(lr), -6, "ENTIER(-5.99");
END Entier;
PROCEDURE IntSize; PROCEDURE IntSize;
VAR l: LONGINT; VAR l: LONGINT;
@ -271,5 +293,6 @@ BEGIN
DivMod; DivMod;
IntSize; IntSize;
Abs; Abs;
Entier;
Console.String("Language tests successful."); Console.Ln; Console.String("Language tests successful."); Console.Ln;
END TestLanguage. END TestLanguage.