* Bug #7296 fixed - Enabling %nan, %inf and -%inf for the cdf* functions 43/11443/16
Paul BIGNIER [Fri, 3 May 2013 09:29:11 +0000 (11:29 +0200)]
Change-Id: Iecf0699cd87975c827f51639da446e3b42e2c00f

35 files changed:
scilab/CHANGES_5.5.X
scilab/modules/statistics/src/dcdflib/cdfbet.f
scilab/modules/statistics/src/dcdflib/cdfbin.f
scilab/modules/statistics/src/dcdflib/cdfchi.f
scilab/modules/statistics/src/dcdflib/cdfchn.f
scilab/modules/statistics/src/dcdflib/cdff.f
scilab/modules/statistics/src/dcdflib/cdffnc.f
scilab/modules/statistics/src/dcdflib/cdfgam.f
scilab/modules/statistics/src/dcdflib/cdfnbn.f
scilab/modules/statistics/src/dcdflib/cdfnor.f
scilab/modules/statistics/src/dcdflib/cdfpoi.f
scilab/modules/statistics/src/dcdflib/cdft.f
scilab/modules/statistics/tests/unit_tests/InfTests.dia.ref [new file with mode: 0644]
scilab/modules/statistics/tests/unit_tests/InfTests.tst [new file with mode: 0644]
scilab/modules/statistics/tests/unit_tests/NaNTests.dia.ref [new file with mode: 0644]
scilab/modules/statistics/tests/unit_tests/NaNTests.tst [new file with mode: 0644]
scilab/modules/statistics/tests/unit_tests/cdfbet.dia.ref
scilab/modules/statistics/tests/unit_tests/cdfbet.tst
scilab/modules/statistics/tests/unit_tests/cdfchi.dia.ref
scilab/modules/statistics/tests/unit_tests/cdfchi.tst
scilab/modules/statistics/tests/unit_tests/cdfchn.dia.ref
scilab/modules/statistics/tests/unit_tests/cdfchn.tst
scilab/modules/statistics/tests/unit_tests/cdff.dia.ref
scilab/modules/statistics/tests/unit_tests/cdff.tst
scilab/modules/statistics/tests/unit_tests/cdffnc.dia.ref
scilab/modules/statistics/tests/unit_tests/cdffnc.tst
scilab/modules/statistics/tests/unit_tests/cdfgam.dia.ref
scilab/modules/statistics/tests/unit_tests/cdfgam.tst
scilab/modules/statistics/tests/unit_tests/cdfnbn.dia.ref
scilab/modules/statistics/tests/unit_tests/cdfnor.dia.ref
scilab/modules/statistics/tests/unit_tests/cdfnor.tst
scilab/modules/statistics/tests/unit_tests/cdfpoi.dia.ref
scilab/modules/statistics/tests/unit_tests/cdfpoi.tst
scilab/modules/statistics/tests/unit_tests/cdft.dia.ref
scilab/modules/statistics/tests/unit_tests/cdft.tst

index d20f1f6..9b3fc74 100644 (file)
@@ -139,6 +139,8 @@ Bug fixes
 
 * Bug #7655 fixed - An example added in help page of type, for type(X)=11 and type(X)=13.
 
+* Bug #7296 fixed - Enabled %nan, %inf and -%inf for the cdf* functions.
+
 * Bug #7684 fixed - Introduction demo splitted in subsections.
 
 * Bug #7781 fixed - The second parameter of iqr function had not effect.
index a886de6..b6b199f 100644 (file)
@@ -118,6 +118,7 @@ C     .. Local Scalars ..
       LOGICAL qhi,qleft,qporq
 C     ..
 C     .. External Functions ..
+      INTEGER vfinite
       DOUBLE PRECISION spmpar
       EXTERNAL spmpar
 C     ..
@@ -141,6 +142,13 @@ C
 C
 C     P
 C
+      IF (ISANAN(p).EQ.1) THEN
+         CALL RETURNANANFORTRAN(a)
+         CALL RETURNANANFORTRAN(b)
+         CALL RETURNANANFORTRAN(x)
+         CALL RETURNANANFORTRAN(y)
+         RETURN
+      ENDIF
       IF (.NOT. ((p.LT.0.0D0).OR. (p.GT.1.0D0))) GO TO 60
       IF (.NOT. (p.LT.0.0D0)) GO TO 40
       bound = 0.0D0
@@ -155,6 +163,13 @@ C
 C
 C     Q
 C
+      IF (ISANAN(q).EQ.1) THEN
+         CALL RETURNANANFORTRAN(a)
+         CALL RETURNANANFORTRAN(b)
+         CALL RETURNANANFORTRAN(x)
+         CALL RETURNANANFORTRAN(y)
+         RETURN
+      ENDIF
       IF (.NOT. ((q.LT.0.0D0).OR. (q.GT.1.0D0))) GO TO 100
       IF (.NOT. (q.LT.0.0D0)) GO TO 80
       bound = 0.0D0
@@ -169,6 +184,13 @@ C
 C
 C     X
 C
+      IF (ISANAN(x).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(a)
+         CALL RETURNANANFORTRAN(b)
+         RETURN
+      ENDIF
       IF (.NOT. ((x.LT.0.0D0).OR. (x.GT.1.0D0))) GO TO 140
       IF (.NOT. (x.LT.0.0D0)) GO TO 120
       bound = 0.0D0
@@ -183,6 +205,13 @@ C
 C
 C     Y
 C
+      IF (ISANAN(y).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(a)
+         CALL RETURNANANFORTRAN(b)
+         RETURN
+      ENDIF
       IF (.NOT. ((y.LT.0.0D0).OR. (y.GT.1.0D0))) GO TO 180
       IF (.NOT. (y.LT.0.0D0)) GO TO 160
       bound = 0.0D0
@@ -197,6 +226,15 @@ C
 C
 C     A
 C
+      IF (ISANAN(a).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(x)
+         CALL RETURNANANFORTRAN(y)
+         CALL RETURNANANFORTRAN(b)
+         RETURN
+      ENDIF
+      IF (vfinite(1,a).EQ.0) a = SIGN(inf,a)
       IF (.NOT. (a.LE.0.0D0)) GO TO 200
       bound = 0.0D0
       status = -6
@@ -207,6 +245,15 @@ C
 C
 C     B
 C
+      IF (ISANAN(b).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(x)
+         CALL RETURNANANFORTRAN(y)
+         CALL RETURNANANFORTRAN(a)
+         RETURN
+      ENDIF
+      IF (vfinite(1,b).EQ.0) b = SIGN(inf,b)
       IF (.NOT. (b.LE.0.0D0)) GO TO 220
       bound = 0.0D0
       status = -7
index 1c8c17a..3419436 100644 (file)
@@ -110,6 +110,7 @@ C     .. Local Scalars ..
       LOGICAL qhi,qleft,qporq
 C     ..
 C     .. External Functions ..
+      INTEGER vfinite
       DOUBLE PRECISION spmpar
       EXTERNAL spmpar
 C     ..
@@ -132,6 +133,13 @@ C     Check arguments
 C
 C     P
 C
+      IF (ISANAN(p).EQ.1) THEN
+         CALL RETURNANANFORTRAN(pr)
+         CALL RETURNANANFORTRAN(ompr)
+         CALL RETURNANANFORTRAN(s)
+         CALL RETURNANANFORTRAN(xn)
+         RETURN
+      ENDIF
       IF (.NOT. ((p.LT.0.0D0).OR. (p.GT.1.0D0))) GO TO 60
       IF (.NOT. (p.LT.0.0D0)) GO TO 40
       bound = 0.0D0
@@ -146,6 +154,13 @@ C
 C
 C     Q
 C
+      IF (ISANAN(q).EQ.1) THEN
+         CALL RETURNANANFORTRAN(pr)
+         CALL RETURNANANFORTRAN(ompr)
+         CALL RETURNANANFORTRAN(s)
+         CALL RETURNANANFORTRAN(xn)
+         RETURN
+      ENDIF
       IF (.NOT. ((q.LT.0.0D0).OR. (q.GT.1.0D0))) GO TO 100
       IF (.NOT. (q.LT.0.0D0)) GO TO 80
       bound = 0.0D0
@@ -160,6 +175,15 @@ C
 C
 C     XN
 C
+      IF (ISANAN(xn).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(s)
+         CALL RETURNANANFORTRAN(pr)
+         CALL RETURNANANFORTRAN(ompr)
+         RETURN
+      ENDIF
+      IF (vfinite(1,xn).EQ.0) xn = SIGN(inf,xn)
       IF (.NOT. (xn.LE.0.0D0)) GO TO 120
       bound = 0.0D0
       status = -5
@@ -170,6 +194,15 @@ C
 C
 C     S
 C
+      IF (ISANAN(s).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(xn)
+         CALL RETURNANANFORTRAN(pr)
+         CALL RETURNANANFORTRAN(ompr)
+         RETURN
+      ENDIF
+      IF (vfinite(1,s).EQ.0) s = SIGN(inf,s)
       IF (.NOT. ((s.LT.0.0D0).OR. ((which.NE.3).AND.
      +    (s.GT.xn)))) GO TO 160
       IF (.NOT. (s.LT.0.0D0)) GO TO 140
@@ -185,6 +218,13 @@ C
 C
 C     PR
 C
+      IF (ISANAN(pr).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(s)
+         CALL RETURNANANFORTRAN(xn)
+         RETURN
+      ENDIF
       IF (.NOT. ((pr.LT.0.0D0).OR. (pr.GT.1.0D0))) GO TO 200
       IF (.NOT. (pr.LT.0.0D0)) GO TO 180
       bound = 0.0D0
@@ -199,6 +239,13 @@ C
 C
 C     OMPR
 C
+      IF (ISANAN(ompr).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(s)
+         CALL RETURNANANFORTRAN(xn)
+         RETURN
+      ENDIF
       IF (.NOT. ((ompr.LT.0.0D0).OR. (ompr.GT.1.0D0))) GO TO 240
       IF (.NOT. (ompr.LT.0.0D0)) GO TO 220
       bound = 0.0D0
index b0325e5..ca52310 100644 (file)
@@ -96,6 +96,7 @@ C     .. Local Scalars ..
       LOGICAL qhi,qleft,qporq
 C     ..
 C     .. External Functions ..
+      INTEGER vfinite
       DOUBLE PRECISION spmpar
       EXTERNAL spmpar
 C     ..
@@ -119,6 +120,11 @@ C
 C
 C     P
 C
+      IF (ISANAN(p).EQ.1) THEN
+         CALL RETURNANANFORTRAN(df)
+         CALL RETURNANANFORTRAN(x)
+         RETURN
+      ENDIF
       IF (.NOT. ((p.LT.0.0D0).OR. (p.GT.1.0D0))) GO TO 60
       IF (.NOT. (p.LT.0.0D0)) GO TO 40
       bound = 0.0D0
@@ -133,6 +139,11 @@ C
 C
 C     Q
 C
+      IF (ISANAN(q).EQ.1) THEN
+         CALL RETURNANANFORTRAN(df)
+         CALL RETURNANANFORTRAN(x)
+         RETURN
+      ENDIF
       IF (.NOT. ((q.LE.0.0D0).OR. (q.GT.1.0D0))) GO TO 100
       IF (.NOT. (q.LE.0.0D0)) GO TO 80
       bound = 0.0D0
@@ -147,6 +158,23 @@ C
 C
 C     X
 C
+      IF (ISANAN(x).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(df)
+         RETURN
+      ENDIF
+      IF (vfinite(1,x).EQ.0) then
+         IF (which.EQ.1) then
+            IF (x.GT.0) then
+               p = 1
+               q = 0
+               RETURN
+            ENDIF
+         ELSE
+            x = SIGN(1D300,x)
+         ENDIF
+      ENDIF
       IF (.NOT. (x.LT.0.0D0)) GO TO 120
       bound = 0.0D0
       status = -4
@@ -157,6 +185,13 @@ C
 C
 C     DF
 C
+      IF (ISANAN(df).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(x)
+         RETURN
+      ENDIF
+      IF (vfinite(1,df).EQ.0) df = SIGN(inf,df)
       IF (.NOT. (df.LE.0.0D0)) GO TO 140
       bound = 0.0D0
       status = -5
index 9ed7225..8aa653b 100644 (file)
@@ -109,6 +109,9 @@ C     .. Local Scalars ..
       DOUBLE PRECISION fx,cum,ccum
       LOGICAL qhi,qleft
 C     ..
+C     .. External Functions ..
+      INTEGER vfinite
+C     ..
 C     .. External Subroutines ..
       EXTERNAL dinvr,dstinv,cumchn
 C     ..
@@ -129,7 +132,12 @@ C
 C
 C     P
 C
-
+      IF (ISANAN(p).EQ.1) THEN
+         CALL RETURNANANFORTRAN(df)
+         CALL RETURNANANFORTRAN(pnonc)
+         CALL RETURNANANFORTRAN(x)
+         RETURN
+      ENDIF
       IF (.NOT. ((p.LT.0.0D0).OR. (p.GT.one))) GO TO 60
       IF (.NOT. (p.LT.0.0D0)) GO TO 40
       bound = 0.0D0
@@ -144,6 +152,24 @@ C
 C
 C     X
 C
+      IF (ISANAN(x).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(df)
+         CALL RETURNANANFORTRAN(pnonc)
+         RETURN
+      ENDIF
+      IF (vfinite(1,x).EQ.0) then
+         IF (which.EQ.1) then
+            IF (x.GT.0) then
+               p = 1
+               q = 0
+               RETURN
+            ENDIF
+         ELSE
+            x = SIGN(1D300,x)
+         ENDIF
+      ENDIF
       IF (.NOT. (x.LT.0.0D0)) GO TO 80
       bound = 0.0D0
       status = -4
@@ -154,6 +180,14 @@ C
 C
 C     DF
 C
+      IF (ISANAN(df).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(x)
+         CALL RETURNANANFORTRAN(pnonc)
+         RETURN
+      ENDIF
+      IF (vfinite(1,df).EQ.0) df = SIGN(inf,df)
       IF (.NOT. (df.LE.0.0D0)) GO TO 100
       bound = 0.0D0
       status = -5
@@ -164,6 +198,14 @@ C
 C
 C     PNONC
 C
+      IF (ISANAN(pnonc).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(x)
+         CALL RETURNANANFORTRAN(df)
+         RETURN
+      ENDIF
+      IF (vfinite(1,pnonc).EQ.0) pnonc = SIGN(inf,pnonc)
       IF (.NOT. (pnonc.LT.0.0D0)) GO TO 120
       bound = 0.0D0
       status = -6
index 90435cd..a048004 100644 (file)
@@ -105,6 +105,7 @@ C     .. Local Scalars ..
       LOGICAL qhi,qleft,qporq
 C     ..
 C     .. External Functions ..
+      INTEGER vfinite
       DOUBLE PRECISION spmpar
       EXTERNAL spmpar
 C     ..
@@ -128,6 +129,12 @@ C
 C
 C     P
 C
+      IF (ISANAN(p).EQ.1) THEN
+         CALL RETURNANANFORTRAN(f)
+         CALL RETURNANANFORTRAN(dfn)
+         CALL RETURNANANFORTRAN(dfd)
+         RETURN
+      ENDIF
       IF (.NOT. ((p.LT.0.0D0).OR. (p.GT.1.0D0))) GO TO 60
       IF (.NOT. (p.LT.0.0D0)) GO TO 40
       bound = 0.0D0
@@ -142,6 +149,12 @@ C
 C
 C     Q
 C
+      IF (ISANAN(q).EQ.1) THEN
+         CALL RETURNANANFORTRAN(f)
+         CALL RETURNANANFORTRAN(dfn)
+         CALL RETURNANANFORTRAN(dfd)
+         RETURN
+      ENDIF
       IF (.NOT. ((q.LE.0.0D0).OR. (q.GT.1.0D0))) GO TO 100
       IF (.NOT. (q.LE.0.0D0)) GO TO 80
       bound = 0.0D0
@@ -156,6 +169,24 @@ C
 C
 C     F
 C
+      IF (ISANAN(f).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(dfn)
+         CALL RETURNANANFORTRAN(dfd)
+         RETURN
+      ENDIF
+      IF (vfinite(1,f).EQ.0) then
+         IF (which.EQ.1) then
+            IF (f.GT.0) then
+               p = 1
+               q = 0
+               RETURN
+            ENDIF
+         ELSE
+            f = SIGN(1D300,f)
+         ENDIF
+      ENDIF
       IF (.NOT. (f.LT.0.0D0)) GO TO 120
       bound = 0.0D0
       status = -4
@@ -166,6 +197,14 @@ C
 C
 C     DFN
 C
+      IF (ISANAN(dfn).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(f)
+         CALL RETURNANANFORTRAN(dfd)
+         RETURN
+      ENDIF
+      IF (vfinite(1,dfn).EQ.0) dfn = SIGN(inf,dfn)
       IF (.NOT. (dfn.LE.0.0D0)) GO TO 140
       bound = 0.0D0
       status = -5
@@ -176,6 +215,14 @@ C
 C
 C     DFD
 C
+      IF (ISANAN(dfd).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(f)
+         CALL RETURNANANFORTRAN(dfn)
+         RETURN
+      ENDIF
+      IF (vfinite(1,dfd).EQ.0) dfd = SIGN(inf,dfd)
       IF (.NOT. (dfd.LE.0.0D0)) GO TO 160
       bound = 0.0D0
       status = -6
index e4d7cee..a9ccd82 100644 (file)
@@ -120,6 +120,9 @@ C     .. Local Scalars ..
       DOUBLE PRECISION fx,cum,ccum
       LOGICAL qhi,qleft
 C     ..
+C     .. External Functions ..
+      INTEGER vfinite
+C     ..
 C     .. External Subroutines ..
       EXTERNAL dinvr,dstinv,cumfnc
 C     ..
@@ -140,6 +143,13 @@ C
 C
 C     P
 C
+      IF (ISANAN(p).EQ.1) THEN
+         CALL RETURNANANFORTRAN(dfn)
+         CALL RETURNANANFORTRAN(dfd)
+         CALL RETURNANANFORTRAN(f)
+         CALL RETURNANANFORTRAN(phonc)
+         RETURN
+      ENDIF
       IF (.NOT. ((p.LT.0.0D0).OR. (p.GT.one))) GO TO 60
       IF (.NOT. (p.LT.0.0D0)) GO TO 40
       bound = 0.0D0
@@ -154,6 +164,25 @@ C
 C
 C     F
 C
+      IF (ISANAN(f).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(dfn)
+         CALL RETURNANANFORTRAN(dfd)
+         CALL RETURNANANFORTRAN(phonc)
+         RETURN
+      ENDIF
+      IF (vfinite(1,f).EQ.0) then
+         IF (which.EQ.1) then
+            IF (f.GT.0) then
+               p = 1
+               q = 0
+               RETURN
+            ENDIF
+         ELSE
+            f = SIGN(1D300,f)
+         ENDIF
+      ENDIF
       IF (.NOT. (f.LT.0.0D0)) GO TO 80
       bound = 0.0D0
       status = -4
@@ -164,6 +193,15 @@ C
 C
 C     DFN
 C
+      IF (ISANAN(dfn).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(f)
+         CALL RETURNANANFORTRAN(dfd)
+         CALL RETURNANANFORTRAN(phonc)
+         RETURN
+      ENDIF
+      IF (vfinite(1,dfn).EQ.0) dfn = SIGN(inf,dfn)
       IF (.NOT. (dfn.LE.0.0D0)) GO TO 100
       bound = 0.0D0
       status = -5
@@ -174,6 +212,15 @@ C
 C
 C     DFD
 C
+      IF (ISANAN(dfd).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(dfn)
+         CALL RETURNANANFORTRAN(f)
+         CALL RETURNANANFORTRAN(phonc)
+         RETURN
+      ENDIF
+      IF (vfinite(1,dfd).EQ.0) dfd = SIGN(inf,dfd)
       IF (.NOT. (dfd.LE.0.0D0)) GO TO 120
       bound = 0.0D0
       status = -6
@@ -184,6 +231,15 @@ C
 C
 C     PHONC
 C
+      IF (ISANAN(phonc).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(dfn)
+         CALL RETURNANANFORTRAN(dfd)
+         CALL RETURNANANFORTRAN(f)
+         RETURN
+      ENDIF
+      IF (vfinite(1,phonc).EQ.0) phonc = SIGN(inf,phonc)
       IF (.NOT. (phonc.LT.0.0D0)) GO TO 140
       bound = 0.0D0
       status = -7
index d690bfa..7978e89 100644 (file)
@@ -120,6 +120,7 @@ C     .. Local Scalars ..
       LOGICAL qhi,qleft,qporq
 C     ..
 C     .. External Functions ..
+      INTEGER vfinite
       DOUBLE PRECISION spmpar
       EXTERNAL spmpar
 C     ..
@@ -143,6 +144,12 @@ C
 C
 C     P
 C
+      IF (ISANAN(p).EQ.1) THEN
+         CALL RETURNANANFORTRAN(shape)
+         CALL RETURNANANFORTRAN(x)
+         CALL RETURNANANFORTRAN(scale)
+         RETURN
+      ENDIF
       IF (.NOT. ((p.LT.0.0D0).OR. (p.GT.1.0D0))) GO TO 60
       IF (.NOT. (p.LT.0.0D0)) GO TO 40
       bound = 0.0D0
@@ -157,6 +164,12 @@ C
 C
 C     Q
 C
+      IF (ISANAN(q).EQ.1) THEN
+         CALL RETURNANANFORTRAN(shape)
+         CALL RETURNANANFORTRAN(x)
+         CALL RETURNANANFORTRAN(scale)
+         RETURN
+      ENDIF
       IF (.NOT. ((q.LE.0.0D0).OR. (q.GT.1.0D0))) GO TO 100
       IF (.NOT. (q.LE.0.0D0)) GO TO 80
       bound = 0.0D0
@@ -171,6 +184,24 @@ C
 C
 C     X
 C
+      IF (ISANAN(x).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(shape)
+         CALL RETURNANANFORTRAN(scale)
+         RETURN
+      ENDIF
+      IF (vfinite(1,x).EQ.0) then
+         IF (which.EQ.1) then
+            IF (x.GT.0) then
+               p = 1
+               q = 0
+               RETURN
+            ENDIF
+         ELSE
+            x = SIGN(1D300,x)
+         ENDIF
+      ENDIF
       IF (.NOT. (x.LT.0.0D0)) GO TO 120
       bound = 0.0D0
       status = -4
@@ -181,6 +212,14 @@ C
 C
 C     SHAPE
 C
+      IF (ISANAN(shape).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(x)
+         CALL RETURNANANFORTRAN(scale)
+         RETURN
+      ENDIF
+      IF (vfinite(1,shape).EQ.0) shape = SIGN(inf,shape)
       IF (.NOT. (shape.LE.0.0D0)) GO TO 140
       bound = 0.0D0
       status = -5
@@ -191,6 +230,14 @@ C
 C
 C     SCALE
 C
+      IF (ISANAN(scale).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(shape)
+         CALL RETURNANANFORTRAN(x)
+         RETURN
+      ENDIF
+      IF (vfinite(1,scale).EQ.0) scale = SIGN(inf,scale)
       IF (.NOT. (scale.LE.0.0D0)) GO TO 160
       bound = 0.0D0
       status = -6
index 2dd86ac..25bc436 100644 (file)
@@ -119,6 +119,7 @@ C     .. Local Scalars ..
       LOGICAL qhi,qleft,qporq
 C     ..
 C     .. External Functions ..
+      INTEGER vfinite
       DOUBLE PRECISION spmpar
       EXTERNAL spmpar
 C     ..
@@ -142,6 +143,13 @@ C
 C
 C     P
 C
+      IF (ISANAN(p).EQ.1) THEN
+         CALL RETURNANANFORTRAN(s)
+         CALL RETURNANANFORTRAN(xn)
+         CALL RETURNANANFORTRAN(pr)
+         CALL RETURNANANFORTRAN(ompr)
+         RETURN
+      ENDIF
       IF (.NOT. ((p.LT.0.0D0).OR. (p.GT.1.0D0))) GO TO 60
       IF (.NOT. (p.LT.0.0D0)) GO TO 40
       bound = 0.0D0
@@ -156,6 +164,13 @@ C
 C
 C     Q
 C
+      IF (ISANAN(q).EQ.1) THEN
+         CALL RETURNANANFORTRAN(s)
+         CALL RETURNANANFORTRAN(xn)
+         CALL RETURNANANFORTRAN(pr)
+         CALL RETURNANANFORTRAN(ompr)
+         RETURN
+      ENDIF
       IF (.NOT. ((q.LE.0.0D0).OR. (q.GT.1.0D0))) GO TO 100
       IF (.NOT. (q.LE.0.0D0)) GO TO 80
       bound = 0.0D0
@@ -170,6 +185,25 @@ C
 C
 C     S
 C
+      IF (ISANAN(s).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(xn)
+         CALL RETURNANANFORTRAN(pr)
+         CALL RETURNANANFORTRAN(ompr)
+         RETURN
+      ENDIF
+      IF (vfinite(1,s).EQ.0) then
+         IF (which.EQ.1) then
+            IF (s.GT.0) then
+               p = 1
+               q = 0
+               RETURN
+            ENDIF
+         ELSE
+            s = SIGN(1D300,s)
+         ENDIF
+      ENDIF
       IF (.NOT. (s.LT.0.0D0)) GO TO 120
       bound = 0.0D0
       status = -4
@@ -180,6 +214,15 @@ C
 C
 C     XN
 C
+      IF (ISANAN(xn).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(s)
+         CALL RETURNANANFORTRAN(pr)
+         CALL RETURNANANFORTRAN(ompr)
+         RETURN
+      ENDIF
+      IF (vfinite(1,xn).EQ.0) xn = SIGN(inf,xn)
       IF (.NOT. (xn.LT.0.0D0)) GO TO 140
       bound = 0.0D0
       status = -5
@@ -190,6 +233,13 @@ C
 C
 C     PR
 C
+      IF (ISANAN(pr).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(s)
+         CALL RETURNANANFORTRAN(xn)
+         RETURN
+      ENDIF
       IF (.NOT. ((pr.LT.0.0D0).OR. (pr.GT.1.0D0))) GO TO 180
       IF (.NOT. (pr.LT.0.0D0)) GO TO 160
       bound = 0.0D0
@@ -204,6 +254,13 @@ C
 C
 C     OMPR
 C
+      IF (ISANAN(ompr).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(s)
+         CALL RETURNANANFORTRAN(xn)
+         RETURN
+      ENDIF
       IF (.NOT. ((ompr.LT.0.0D0).OR. (ompr.GT.1.0D0))) GO TO 220
       IF (.NOT. (ompr.LT.0.0D0)) GO TO 200
       bound = 0.0D0
index 78c44a5..d0a7389 100644 (file)
@@ -107,7 +107,7 @@ C     .. Local Scalars ..
       DOUBLE PRECISION z,pq
 C     ..
 C     .. External Functions ..
-
+      INTEGER vfinite
       DOUBLE PRECISION dinvnr,spmpar
       EXTERNAL dinvnr,spmpar
 C     ..
@@ -132,6 +132,12 @@ C
 C
 C     P
 C
+      IF (ISANAN(p).EQ.1) THEN
+         CALL RETURNANANFORTRAN(x)
+         CALL RETURNANANFORTRAN(sd)
+         CALL RETURNANANFORTRAN(mean)
+         RETURN
+      ENDIF
       IF (.NOT. ((p.LE.0.0D0).OR. (p.GT.1.0D0))) GO TO 60
       IF (.NOT. (p.LE.0.0D0)) GO TO 40
       bound = 0.0D0
@@ -146,6 +152,12 @@ C
 C
 C     Q
 C
+      IF (ISANAN(q).EQ.1) THEN
+         CALL RETURNANANFORTRAN(x)
+         CALL RETURNANANFORTRAN(sd)
+         CALL RETURNANANFORTRAN(mean)
+         RETURN
+      ENDIF
       IF (.NOT. ((q.LE.0.0D0).OR. (q.GT.1.0D0))) GO TO 100
       IF (.NOT. (q.LE.0.0D0)) GO TO 80
       bound = 0.0D0
@@ -174,8 +186,52 @@ C
   140 CONTINUE
   150 IF (which.EQ.4) GO TO 170
 C
+C     X
+C
+      IF (ISANAN(x).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(mean)
+         CALL RETURNANANFORTRAN(sd)
+         RETURN
+      ENDIF
+      IF (vfinite(1,x).EQ.0) then
+         IF (which.EQ.1) then
+            IF (x.GT.0) then
+               p = 1
+               q = 0
+               RETURN
+            ELSE
+               p = 0
+               q = 1
+               RETURN
+            ENDIF
+         ELSE
+            x = SIGN(1D308,x)
+         ENDIF
+      ENDIF
+C
+C     MEAN
+C
+      IF (ISANAN(mean).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(x)
+         CALL RETURNANANFORTRAN(sd)
+         RETURN
+      ENDIF
+      IF (vfinite(1,mean).EQ.0) mean = SIGN(1D308,mean)
+C
 C     SD
 C
+      IF (ISANAN(sd).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(x)
+         CALL RETURNANANFORTRAN(mean)
+         RETURN
+      ENDIF
+      IF (vfinite(1,sd).EQ.0) sd = SIGN(1D308,sd)
       IF (.NOT. (sd.LE.0.0D0)) GO TO 160
       bound = 0.0D0
       status = -6
index cacbf5c..39b1337 100644 (file)
@@ -94,6 +94,7 @@ C     .. Local Scalars ..
       LOGICAL qhi,qleft,qporq
 C     ..
 C     .. External Functions ..
+      INTEGER vfinite
       DOUBLE PRECISION spmpar
       EXTERNAL spmpar
 C     ..
@@ -117,6 +118,11 @@ C
 C
 C     P
 C
+      IF (ISANAN(p).EQ.1) THEN
+         CALL RETURNANANFORTRAN(s)
+         CALL RETURNANANFORTRAN(xlam)
+         RETURN
+      ENDIF
       IF (.NOT. ((p.LT.0.0D0).OR. (p.GT.1.0D0))) GO TO 60
       IF (.NOT. (p.LT.0.0D0)) GO TO 40
       bound = 0.0D0
@@ -131,6 +137,11 @@ C
 C
 C     Q
 C
+      IF (ISANAN(q).EQ.1) THEN
+         CALL RETURNANANFORTRAN(s)
+         CALL RETURNANANFORTRAN(xlam)
+         RETURN
+      ENDIF
       IF (.NOT. ((q.LE.0.0D0).OR. (q.GT.1.0D0))) GO TO 100
       IF (.NOT. (q.LE.0.0D0)) GO TO 80
       bound = 0.0D0
@@ -145,6 +156,23 @@ C
 C
 C     S
 C
+      IF (ISANAN(s).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(xlam)
+         RETURN
+      ENDIF
+      IF (vfinite(1,s).EQ.0) then
+         IF (which.EQ.1) then
+            IF (s.GT.0) then
+               p = 1
+               q = 0
+               RETURN
+            ENDIF
+         ELSE
+            s = SIGN(1D300,s)
+         ENDIF
+      ENDIF
       IF (.NOT. (s.LT.0.0D0)) GO TO 120
       bound = 0.0D0
       status = -4
@@ -155,6 +183,13 @@ C
 C
 C     XLAM
 C
+      IF (ISANAN(xlam).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(s)
+         RETURN
+      ENDIF
+      IF (vfinite(1,xlam).EQ.0) xlam = SIGN(inf,xlam)
       IF (.NOT. (xlam.LT.0.0D0)) GO TO 140
       bound = 0.0D0
       status = -5
index 26c6475..37b5592 100644 (file)
@@ -96,6 +96,7 @@ C     .. Local Scalars ..
       LOGICAL qhi,qleft,qporq
 C     ..
 C     .. External Functions ..
+      INTEGER vfinite
       DOUBLE PRECISION spmpar,dt1
       EXTERNAL spmpar,dt1
 C     ..
@@ -119,6 +120,11 @@ C
 C
 C     P
 C
+      IF (ISANAN(p).EQ.1) THEN
+         CALL RETURNANANFORTRAN(t)
+         CALL RETURNANANFORTRAN(df)
+         RETURN
+      ENDIF
       IF (.NOT. ((p.LE.0.0D0).OR. (p.GT.1.0D0))) GO TO 60
       IF (.NOT. (p.LE.0.0D0)) GO TO 40
       bound = 0.0D0
@@ -133,6 +139,11 @@ C
 C
 C     Q
 C
+      IF (ISANAN(q).EQ.1) THEN
+         CALL RETURNANANFORTRAN(t)
+         CALL RETURNANANFORTRAN(df)
+         RETURN
+      ENDIF
       IF (.NOT. ((q.LE.0.0D0).OR. (q.GT.1.0D0))) GO TO 100
       IF (.NOT. (q.LE.0.0D0)) GO TO 80
       bound = 0.0D0
@@ -145,8 +156,39 @@ C
   100 CONTINUE
   110 IF (which.EQ.3) GO TO 130
 C
+C     T
+C
+      IF (ISANAN(t).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(df)
+         RETURN
+      ENDIF
+      IF (vfinite(1,t).EQ.0) then
+         IF (which.EQ.1) then
+            IF (t.GT.0) then
+               p = 1
+               q = 0
+               RETURN
+            ELSE
+               p = 0
+               q = 1
+               RETURN
+            ENDIF
+         ELSE
+            t = SIGN(1D300,t)
+         ENDIF
+      ENDIF
+C
 C     DF
 C
+      IF (ISANAN(df).EQ.1) THEN
+         CALL RETURNANANFORTRAN(p)
+         CALL RETURNANANFORTRAN(q)
+         CALL RETURNANANFORTRAN(t)
+         RETURN
+      ENDIF
+      IF (vfinite(1,df).EQ.0) df = SIGN(inf,df)
       IF (.NOT. (df.LE.0.0D0)) GO TO 120
       bound = 0.0D0
       status = -5
diff --git a/scilab/modules/statistics/tests/unit_tests/InfTests.dia.ref b/scilab/modules/statistics/tests/unit_tests/InfTests.dia.ref
new file mode 100644 (file)
index 0000000..be9b92c
--- /dev/null
@@ -0,0 +1,84 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 -  Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- ENGLISH INPOSED -->
+// Run with test_run('statistics', 'InfTests', ['no_check_error_output'])
+inf = %inf;
+tol = 1e-299;
+// Testing that the requested return is %inf when one input argument is %inf
+// cdfchi
+[res, res2] = cdfchi("PQ", inf, 1);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdfchi("PQ", 1, inf);
+assert_checkalmostequal(res, 0, tol);
+assert_checkalmostequal(res2, 1, tol);
+// cdfchn
+[res, res2] = cdfchn("PQ", inf, 1, 1);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdfchn("PQ", 1, inf, 1e-10);
+assert_checkalmostequal(res, 0, tol);
+assert_checkalmostequal(res2, 1, tol);
+// cdff
+[res, res2] = cdff("PQ", inf, 1, 1e-50);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdff("PQ", 1, inf, 1e-50);
+assert_checkalmostequal(res, 1, tol);
+assert_checkalmostequal(res2, 0, tol);
+// cdffnc
+[res, res2] = cdffnc("PQ", inf, 1, 10, 0);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdffnc("PQ", 1e-10, inf, 10, 0);
+assert_checkalmostequal(res, 0, tol);
+assert_checkalmostequal(res2, 1, tol);
+// cdfgam
+[res, res2] = cdfgam("PQ", inf, 1, 1);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdfgam("PQ", 1, inf, 1);
+assert_checkalmostequal(res, 0, tol);
+assert_checkalmostequal(res2, 1, tol);
+[res, res2] = cdfgam("PQ", 1, 1, inf);
+assert_checkalmostequal(res, 1, tol);
+assert_checkalmostequal(res2, 0, tol);
+// cdfnbn
+[res, res2] = cdfnbn("PQ", inf, 1, 0, 1);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdfnbn("PQ", 1, inf, 0, 1);
+assert_checkalmostequal(res, 0, tol);
+assert_checkalmostequal(res2, 1, tol);
+// cdfnor
+[res, res2] = cdfnor("PQ", inf, 1, 1);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdfnor("PQ", -inf, 1, 1);
+assert_checkequal(res, 0);
+assert_checkequal(res2, 1);
+[res, res2] = cdfnor("PQ", 1, inf, 1);
+assert_checkalmostequal(res, 0, tol);
+assert_checkalmostequal(res2, 1, tol);
+[res, res2] = cdfnor("PQ", 1, -inf, 1);
+assert_checkalmostequal(res, 1, tol);
+assert_checkalmostequal(res2, 0, tol);
+// cdfpoi
+[res, res2] = cdfpoi("PQ", inf, 1);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdfpoi("PQ", 1, inf);
+assert_checkalmostequal(res, 0, tol);
+assert_checkalmostequal(res2, 1, tol);
+// cdft
+[res, res2] = cdft("PQ", inf, 1);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdft("PQ", -inf, 1);
+assert_checkequal(res, 0);
+assert_checkequal(res2, 1);
diff --git a/scilab/modules/statistics/tests/unit_tests/InfTests.tst b/scilab/modules/statistics/tests/unit_tests/InfTests.tst
new file mode 100644 (file)
index 0000000..fe47faa
--- /dev/null
@@ -0,0 +1,97 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 -  Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+// <-- ENGLISH INPOSED -->
+
+// Run with test_run('statistics', 'InfTests', ['no_check_error_output'])
+
+inf = %inf;
+tol = 1e-299;
+
+// Testing that the requested return is %inf when one input argument is %inf
+
+// cdfchi
+[res, res2] = cdfchi("PQ", inf, 1);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdfchi("PQ", 1, inf);
+assert_checkalmostequal(res, 0, tol);
+assert_checkalmostequal(res2, 1, tol);
+
+// cdfchn
+[res, res2] = cdfchn("PQ", inf, 1, 1);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdfchn("PQ", 1, inf, 1e-10);
+assert_checkalmostequal(res, 0, tol);
+assert_checkalmostequal(res2, 1, tol);
+
+// cdff
+[res, res2] = cdff("PQ", inf, 1, 1e-50);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdff("PQ", 1, inf, 1e-50);
+assert_checkalmostequal(res, 1, tol);
+assert_checkalmostequal(res2, 0, tol);
+
+// cdffnc
+[res, res2] = cdffnc("PQ", inf, 1, 10, 0);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdffnc("PQ", 1e-10, inf, 10, 0);
+assert_checkalmostequal(res, 0, tol);
+assert_checkalmostequal(res2, 1, tol);
+
+// cdfgam
+[res, res2] = cdfgam("PQ", inf, 1, 1);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdfgam("PQ", 1, inf, 1);
+assert_checkalmostequal(res, 0, tol);
+assert_checkalmostequal(res2, 1, tol);
+[res, res2] = cdfgam("PQ", 1, 1, inf);
+assert_checkalmostequal(res, 1, tol);
+assert_checkalmostequal(res2, 0, tol);
+
+// cdfnbn
+[res, res2] = cdfnbn("PQ", inf, 1, 0, 1);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdfnbn("PQ", 1, inf, 0, 1);
+assert_checkalmostequal(res, 0, tol);
+assert_checkalmostequal(res2, 1, tol);
+
+// cdfnor
+[res, res2] = cdfnor("PQ", inf, 1, 1);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdfnor("PQ", -inf, 1, 1);
+assert_checkequal(res, 0);
+assert_checkequal(res2, 1);
+[res, res2] = cdfnor("PQ", 1, inf, 1);
+assert_checkalmostequal(res, 0, tol);
+assert_checkalmostequal(res2, 1, tol);
+[res, res2] = cdfnor("PQ", 1, -inf, 1);
+assert_checkalmostequal(res, 1, tol);
+assert_checkalmostequal(res2, 0, tol);
+
+// cdfpoi
+[res, res2] = cdfpoi("PQ", inf, 1);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdfpoi("PQ", 1, inf);
+assert_checkalmostequal(res, 0, tol);
+assert_checkalmostequal(res2, 1, tol);
+
+// cdft
+[res, res2] = cdft("PQ", inf, 1);
+assert_checkequal(res, 1);
+assert_checkequal(res2, 0);
+[res, res2] = cdft("PQ", -inf, 1);
+assert_checkequal(res, 0);
+assert_checkequal(res2, 1);
diff --git a/scilab/modules/statistics/tests/unit_tests/NaNTests.dia.ref b/scilab/modules/statistics/tests/unit_tests/NaNTests.dia.ref
new file mode 100644 (file)
index 0000000..d7d7ea8
--- /dev/null
@@ -0,0 +1,120 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 -  Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- ENGLISH INPOSED -->
+// Run with test_run('statistics', 'NaNTests', ['no_check_error_output'])
+nan = %nan;
+// Testing that the requested return is %nan when one input argument is %nan
+// cdfbet
+[res, res2] = cdfbet("PQ", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+[res, res2] = cdfbet("XY", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfbet("A", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfbet("B", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+// cdfbin
+[res, res2] = cdfbin("PQ", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfbin("S", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfbin("Xn", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+[res, res2] = cdfbin("PrOmpr", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+// cdfchi
+[res, res2] = cdfchi("PQ", nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfchi("X", nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfchi("Df", nan, nan, nan);
+assert_checkequal(res, nan);
+// cdfchn
+[res, res2] = cdfchn("PQ", nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfchn("X", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfchn("Df", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfchn("Pnonc", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+// cdff
+[res, res2] = cdff("PQ", nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdff("F", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdff("Dfn", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdff("Dfd",nan, nan, nan, nan);
+assert_checkequal(res, nan);
+// cdffnc
+[res, res2] = cdffnc("PQ", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdffnc("F", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdffnc("Dfn", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdffnc("Dfd", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdffnc("Pnonc", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+// cdfgam
+[res, res2] = cdfgam("PQ", nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfgam("X", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfgam("Shape", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfgam("Rate", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+// cdfnbn
+[res, res2] = cdfnbn("PQ", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfnbn("S", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfnbn("Xn", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+[res, res2] = cdfnbn("PrOmpr", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+// cdfnor
+[res, res2] = cdfnor("PQ", nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfnor("X", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfnor("Mean", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfnor("Std", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+// cdfpoi
+[res, res2] = cdfpoi("PQ", nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfpoi("S", nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfpoi("Xlam", nan, nan, nan);
+assert_checkequal(res, nan);
+// cdft
+[res, res2] = cdft("PQ", nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdft("T", nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdft("Df", nan, nan, nan);
+assert_checkequal(res, nan);
diff --git a/scilab/modules/statistics/tests/unit_tests/NaNTests.tst b/scilab/modules/statistics/tests/unit_tests/NaNTests.tst
new file mode 100644 (file)
index 0000000..f86a3e3
--- /dev/null
@@ -0,0 +1,135 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 -  Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+// <-- ENGLISH INPOSED -->
+
+// Run with test_run('statistics', 'NaNTests', ['no_check_error_output'])
+
+nan = %nan;
+
+// Testing that the requested return is %nan when one input argument is %nan
+
+// cdfbet
+[res, res2] = cdfbet("PQ", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+[res, res2] = cdfbet("XY", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfbet("A", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfbet("B", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+
+// cdfbin
+[res, res2] = cdfbin("PQ", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfbin("S", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfbin("Xn", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+[res, res2] = cdfbin("PrOmpr", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+
+// cdfchi
+[res, res2] = cdfchi("PQ", nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfchi("X", nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfchi("Df", nan, nan, nan);
+assert_checkequal(res, nan);
+
+// cdfchn
+[res, res2] = cdfchn("PQ", nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfchn("X", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfchn("Df", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfchn("Pnonc", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+
+// cdff
+[res, res2] = cdff("PQ", nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdff("F", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdff("Dfn", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdff("Dfd",nan, nan, nan, nan);
+assert_checkequal(res, nan);
+
+// cdffnc
+[res, res2] = cdffnc("PQ", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdffnc("F", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdffnc("Dfn", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdffnc("Dfd", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdffnc("Pnonc", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+
+// cdfgam
+[res, res2] = cdfgam("PQ", nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfgam("X", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfgam("Shape", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfgam("Rate", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+
+// cdfnbn
+[res, res2] = cdfnbn("PQ", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfnbn("S", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfnbn("Xn", nan, nan, nan, nan, nan);
+assert_checkequal(res, nan);
+[res, res2] = cdfnbn("PrOmpr", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+
+// cdfnor
+[res, res2] = cdfnor("PQ", nan, nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfnor("X", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfnor("Mean", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfnor("Std", nan, nan, nan, nan);
+assert_checkequal(res, nan);
+
+// cdfpoi
+[res, res2] = cdfpoi("PQ", nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdfpoi("S", nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdfpoi("Xlam", nan, nan, nan);
+assert_checkequal(res, nan);
+
+// cdft
+[res, res2] = cdft("PQ", nan, nan);
+assert_checkequal(res, nan);
+assert_checkequal(res2, nan);
+res = cdft("T", nan, nan, nan);
+assert_checkequal(res, nan);
+res = cdft("Df", nan, nan, nan);
+assert_checkequal(res, nan);
index 0686948..b11ede6 100644 (file)
@@ -7,6 +7,7 @@
 // =============================================================================
 // Tests for beta distribution
 // =============================================================================
+// Run with test_run('statistics','cdfbet',['no_check_error_output']);
 prec = 1.e-5;
 A  = 2;
 B  = 3;
@@ -32,3 +33,18 @@ A1 = cdfbet('A',B,p,q,x,y);
 assert_checkalmostequal(A1(2:$-1), A(2:$-1));
 B1 = cdfbet('B',p,q,x,y,A);
 assert_checkalmostequal(B1(2:$-1), B(2:$-1));
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+X        = 0;
+Y        = 1;
+A        = 1;
+B        = 1;
+X        = %nan; // X NaN
+[P,Q]    = cdfbet("PQ", X, Y, A, B);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
+X        = 1;
+Y        = %nan; // Y NaN
+[P,Q]    = cdfbet("PQ", X, Y, A, B);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index 15eec43..3af1eb2 100644 (file)
@@ -9,6 +9,8 @@
 // Tests for beta distribution
 // =============================================================================
 
+// Run with test_run('statistics','cdfbet',['no_check_error_output']);
+
 prec = 1.e-5;
 
 A  = 2;
@@ -46,3 +48,21 @@ assert_checkalmostequal(A1(2:$-1), A(2:$-1));
 
 B1 = cdfbet('B',p,q,x,y,A);
 assert_checkalmostequal(B1(2:$-1), B(2:$-1));
+
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+X        = 0;
+Y        = 1;
+A        = 1;
+B        = 1;
+
+X        = %nan; // X NaN
+[P,Q]    = cdfbet("PQ", X, Y, A, B);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
+
+X        = 1;
+Y        = %nan; // Y NaN
+[P,Q]    = cdfbet("PQ", X, Y, A, B);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index 65f9b75..50b868d 100644 (file)
@@ -1,10 +1,13 @@
 // =============================================================================
-// Tests for cdfchi() function
-//
-// Scilab Team
-// Copyright INRIA
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) ????-2008 - INRIA
 //
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// =============================================================================
+// Tests for cdfchi() function
 // =============================================================================
+// Run with test_run('statistics','cdfchi',['no_check_error_output']);
 prec = 1.e-5;
 x  = [0.01,0.025,0.05,0.1,0.9,0.95];
 deff('[y]=chi1(x)','y=exp(-x/2)/sqrt(2*%pi*x)');
@@ -13,10 +16,21 @@ for xx=x
        y1=[y1,intg(0,xx,chi1)];
 end
 y2 = cdfchi("PQ",x,ones(x));
-if norm(y1-y2) > prec then bugmes();quit;end
+if norm(y1-y2) > prec then bugmes();quit;end 
 df       = [1,2,3,4,5,6];
 [P,Q]    = cdfchi("PQ",x,df);
 [x1]     = cdfchi("X",df,P,Q);
 [df1]    = cdfchi("Df",P,Q,x);
 if norm(x1-x)   > prec then bugmes();quit;end
 if norm(df1-df) > prec then bugmes();quit;end
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+Df       = 1;
+X        = %inf; // Inf
+[P,Q]    = cdfchi("PQ", X, Df);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+X        = %nan; // NaN
+[P,Q]    = cdfchi("PQ", X, Df);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index 9fa0280..fdf63f1 100644 (file)
@@ -9,6 +9,8 @@
 // Tests for cdfchi() function
 // =============================================================================
 
+// Run with test_run('statistics','cdfchi',['no_check_error_output']);
+
 prec = 1.e-5;
 
 x  = [0.01,0.025,0.05,0.1,0.9,0.95];
@@ -29,3 +31,17 @@ df       = [1,2,3,4,5,6];
 
 if norm(x1-x)   > prec then pause,end
 if norm(df1-df) > prec then pause,end
+
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+Df       = 1;
+
+X        = %inf; // Inf
+[P,Q]    = cdfchi("PQ", X, Df);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+
+X        = %nan; // NaN
+[P,Q]    = cdfchi("PQ", X, Df);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index 9dc58e2..76d2694 100644 (file)
@@ -1,10 +1,13 @@
 // =============================================================================
-// Tests for cdfchn function
-//
-// Scilab Team
-// Copyright INRIA
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) ????-2008 - INRIA
 //
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// =============================================================================
+// Tests for cdfchn function
 // =============================================================================
+// Run with test_run('statistics','cdfchn',['no_check_error_output']);
 prec = 1.e-5;
 x      = [0.01,0.025,0.05,0.1,0.9,0.95];
 y1     = cdfchi("PQ",x,ones(x));
@@ -17,3 +20,15 @@ pno    = df/10;
 [df1]  = cdfchn("Df",pno,P,Q,x);
 if norm(x1-x)   > prec then bugmes();quit;end
 if norm(df1-df) > prec then bugmes();quit;end
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+Df       = 1;
+Pnonc    = 0.1;
+X        = %inf; // Inf
+[P,Q]    = cdfchn("PQ", X, Df, Pnonc);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+X        = %nan; // NaN
+[P,Q]    = cdfchn("PQ", X, Df, Pnonc);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index b0ea2b7..6ec74a3 100644 (file)
@@ -9,6 +9,8 @@
 // Tests for cdfchn function
 // =============================================================================
 
+// Run with test_run('statistics','cdfchn',['no_check_error_output']);
+
 prec = 1.e-5;
 
 x      = [0.01,0.025,0.05,0.1,0.9,0.95];
@@ -24,3 +26,18 @@ pno    = df/10;
 
 if norm(x1-x)   > prec then pause,end
 if norm(df1-df) > prec then pause,end
+
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+Df       = 1;
+Pnonc    = 0.1;
+
+X        = %inf; // Inf
+[P,Q]    = cdfchn("PQ", X, Df, Pnonc);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+
+X        = %nan; // NaN
+[P,Q]    = cdfchn("PQ", X, Df, Pnonc);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index 05c0029..33440af 100644 (file)
@@ -1,10 +1,13 @@
 // =============================================================================
-// Tests for cdff() function
-//
-// Scilab Team
-// Copyright INRIA
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) ????-2008 - INRIA
 //
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// =============================================================================
+// Tests for cdff() function
 // =============================================================================
+// Run with test_run('statistics','cdff',['no_check_error_output']);
 prec = 1.e-5;
 f       = [1:2];
 dfn     = [1:2];
@@ -16,3 +19,15 @@ dfd     = 2*dfn;
 if norm(f1-f)     > prec then bugmes();quit;end
 if norm(dfn1-dfn) > prec then bugmes();quit;end
 if norm(dfd1-dfd) > prec then bugmes();quit;end
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+dfn      = 1;
+dfd      = 2;
+f        = %inf; // Inf
+[P,Q]    = cdff("PQ", f, dfn, dfd);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+f        = %nan; // NaN
+[P,Q]    = cdff("PQ", f, dfn, dfd);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index 3dbb3b9..a1f1bb6 100644 (file)
@@ -9,6 +9,8 @@
 // Tests for cdff() function
 // =============================================================================
 
+// Run with test_run('statistics','cdff',['no_check_error_output']);
+
 prec = 1.e-5;
 
 f       = [1:2];
@@ -23,3 +25,18 @@ dfd     = 2*dfn;
 if norm(f1-f)     > prec then pause,end
 if norm(dfn1-dfn) > prec then pause,end
 if norm(dfd1-dfd) > prec then pause,end
+
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+dfn      = 1;
+dfd      = 2;
+
+f        = %inf; // Inf
+[P,Q]    = cdff("PQ", f, dfn, dfd);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+
+f        = %nan; // NaN
+[P,Q]    = cdff("PQ", f, dfn, dfd);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index 71f9833..b31279d 100644 (file)
@@ -1,10 +1,13 @@
 // =============================================================================
-// Tests for cdffnc() function
-//
-// Scilab Team
-// Copyright INRIA
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) ????-2008 - INRIA
 //
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// =============================================================================
+// Tests for cdffnc() function
 // =============================================================================
+// Run with test_run('statistics','cdffnc',['no_check_error_output']);
 prec     = 1.e-5;
 f        = [1:2];
 dfn      = [1:2];
@@ -19,3 +22,16 @@ if norm(f1-f)       > prec then bugmes();quit;end
 if norm(dfn1-dfn)   > prec then bugmes();quit;end
 //if norm(dfd1-dfd) > prec then bugmes();quit;end
 if norm(pnonc-pn)   > prec then bugmes();quit;end
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+dfn      = 1;
+dfd      = 2;
+pn       = 0;
+f        = %inf; // Inf
+[P,Q]    = cdffnc("PQ", f, dfn, dfd, pn);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+f        = %nan; // NaN
+[P,Q]    = cdffnc("PQ", f, dfn, dfd, pn);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index 1284b0c..ad401ed 100644 (file)
@@ -9,6 +9,8 @@
 // Tests for cdffnc() function
 // =============================================================================
 
+// Run with test_run('statistics','cdffnc',['no_check_error_output']);
+
 prec     = 1.e-5;
 
 f        = [1:2];
@@ -26,3 +28,19 @@ if norm(f1-f)       > prec then pause,end
 if norm(dfn1-dfn)   > prec then pause,end
 //if norm(dfd1-dfd) > prec then pause,end
 if norm(pnonc-pn)   > prec then pause,end
+
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+dfn      = 1;
+dfd      = 2;
+pn       = 0;
+
+f        = %inf; // Inf
+[P,Q]    = cdffnc("PQ", f, dfn, dfd, pn);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+
+f        = %nan; // NaN
+[P,Q]    = cdffnc("PQ", f, dfn, dfd, pn);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index bbd9c75..8f69edf 100644 (file)
@@ -7,27 +7,28 @@
 // =============================================================================
 // <-- CLI SHELL MODE -->
 // <-- ENGLISH IMPOSED -->
+// Run with test_run('statistics','cdfgam',['no_check_error_output']);
 //
 // Assessing the quality of the Normal distribution function
 // References
 //   Yalta, A. T. 2008. The accuracy of statistical distributions in Microsoft®Excel 2007. Comput. Stat. Data Anal. 52, 10 (Jun. 2008), 4579-4586. DOI= http://dx.doi.org/10.1016/j.csda.2008.03.005 
-//   Computation of Statistical Distributions (ELV), Leo Knüsel 
+//   Computation of Statistical Distributions (ELV), Leo Knüsel
 // Table 5
 // Check Gamma distribution with parameters (x, alpha, beta = 1, Sigma = 1)
 //
 // Table of inputs from Yalta, 2008
 // [x shape scale P ]
 table = [
- 0.1 , 0.1 , 1 , 0.827552 
- 0.2 , 0.1 , 1 , 0.879420 
- 0.2 , 0.2 , 1 , 0.764435 
- 0.3 , 0.2 , 1 , 0.816527 
- 0.3 , 0.3 , 1 , 0.726957 
- 0.4 , 0.3 , 1 , 0.776381 
- 0.4 , 0.4 , 1 , 0.701441 
- 0.5 , 0.4 , 1 , 0.748019 
- 0.5 , 0.5 , 1 , 0.682689 
- 0.6 , 0.5 , 1 , 0.726678 
+ 0.1 , 0.1 , 1 , 0.827552
+ 0.2 , 0.1 , 1 , 0.879420
+ 0.2 , 0.2 , 1 , 0.764435
+ 0.3 , 0.2 , 1 , 0.816527
+ 0.3 , 0.3 , 1 , 0.726957
+ 0.4 , 0.3 , 1 , 0.776381
+ 0.4 , 0.4 , 1 , 0.701441
+ 0.5 , 0.4 , 1 , 0.748019
+ 0.5 , 0.5 , 1 , 0.682689
+ 0.6 , 0.5 , 1 , 0.726678
 ];
 precision = 1.e-5;
 ntests = size(table,"r");
@@ -117,3 +118,15 @@ for i = 1 : ntests
     mprintf("Test #%3d/%3d: Digits p1= %.1f, q1=%.1f, X= %.1f, S= %.1f, R= %.1f\n",i,ntests,dp,dq,dx,ds,dr);
   end
 end
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+Shape = 0;
+Rate = 1;
+X = %inf; // Inf
+[P, Q] = cdfgam("PQ", X, Shape, Rate);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+X = %nan; // NaN
+[P, Q] = cdfgam("PQ", X, Shape, Rate);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index ae8e3ae..8fa14f0 100644 (file)
@@ -9,11 +9,13 @@
 // <-- CLI SHELL MODE -->
 // <-- ENGLISH IMPOSED -->
 
+// Run with test_run('statistics','cdfgam',['no_check_error_output']);
+
 //
 // Assessing the quality of the Normal distribution function
 // References
 //   Yalta, A. T. 2008. The accuracy of statistical distributions in Microsoft®Excel 2007. Comput. Stat. Data Anal. 52, 10 (Jun. 2008), 4579-4586. DOI= http://dx.doi.org/10.1016/j.csda.2008.03.005 
-//   Computation of Statistical Distributions (ELV), Leo Knüsel 
+//   Computation of Statistical Distributions (ELV), Leo Knüsel
 // Table 5
 // Check Gamma distribution with parameters (x, alpha, beta = 1, Sigma = 1)
 //
 // Table of inputs from Yalta, 2008
 // [x shape scale P ]
 table = [
- 0.1 , 0.1 , 1 , 0.827552 
- 0.2 , 0.1 , 1 , 0.879420 
- 0.2 , 0.2 , 1 , 0.764435 
- 0.3 , 0.2 , 1 , 0.816527 
- 0.3 , 0.3 , 1 , 0.726957 
- 0.4 , 0.3 , 1 , 0.776381 
- 0.4 , 0.4 , 1 , 0.701441 
- 0.5 , 0.4 , 1 , 0.748019 
- 0.5 , 0.5 , 1 , 0.682689 
- 0.6 , 0.5 , 1 , 0.726678 
+ 0.1 , 0.1 , 1 , 0.827552
+ 0.2 , 0.1 , 1 , 0.879420
+ 0.2 , 0.2 , 1 , 0.764435
+ 0.3 , 0.2 , 1 , 0.816527
+ 0.3 , 0.3 , 1 , 0.726957
+ 0.4 , 0.3 , 1 , 0.776381
+ 0.4 , 0.4 , 1 , 0.701441
+ 0.5 , 0.4 , 1 , 0.748019
+ 0.5 , 0.5 , 1 , 0.682689
+ 0.6 , 0.5 , 1 , 0.726678
 ];
 
 precision = 1.e-5;
@@ -127,3 +129,17 @@ for i = 1 : ntests
   end
 end
 
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+Shape = 0;
+Rate = 1;
+
+X = %inf; // Inf
+[P, Q] = cdfgam("PQ", X, Shape, Rate);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+
+X = %nan; // NaN
+[P, Q] = cdfgam("PQ", X, Shape, Rate);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index 001dce2..99dda1d 100644 (file)
@@ -1,9 +1,11 @@
 // =============================================================================
-// Tests for cdfnbn() function
-//
-// Scilab Team
-// Copyright INRIA
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) ????-2008 - INRIA
 //
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// =============================================================================
+// Tests for cdfnbn() function
 // =============================================================================
 prec        = 1.e-5;
 S           = 2;
index d31ba62..c4e5105 100644 (file)
@@ -7,7 +7,8 @@
 // =============================================================================
 // <-- CLI SHELL MODE -->
 // <-- ENGLISH IMPOSED -->
-// 
+// Run with test_run('statistics','cdfnor',['no_check_error_output']);
+//
 // References
 // Assessing the quality of the Normal distribution function
 // References
 //
 // Table from Yalta, 2008.
 table = [
-  0.5 , 0.0 
-  1.e-1 , -1.28155 
-  1.e-2 , -2.32635 
-  1.e-3 , -3.09023 
-  1.e-4 , -3.71902 
-  1.e-5 , -4.26489 
-  1.e-6 , -4.75342 
-  1.e-7 , -5.19934 
-  1.e-15 , -7.94135 
-  1.e-16 , -8.22208 
-  1.e-100 , -21.2735 
-  1.e-197 , -29.9763 
-  1.e-198 , -30.0529 
-  1.e-300 , -37.0471 
+  0.5 , 0.0
+  1.e-1 , -1.28155
+  1.e-2 , -2.32635
+  1.e-3 , -3.09023
+  1.e-4 , -3.71902
+  1.e-5 , -4.26489
+  1.e-6 , -4.75342
+  1.e-7 , -5.19934
+  1.e-15 , -7.94135
+  1.e-16 , -8.22208
+  1.e-100 , -21.2735
+  1.e-197 , -29.9763
+  1.e-198 , -30.0529
+  1.e-300 , -37.0471
 ];
 precision = 1.e-5;
 nt = size(table,"r");
@@ -105,3 +106,19 @@ for k = 1 : nt
     mprintf("Test #%3d/%3d: Digits p1= %.1f, q1=%.1f, X=%.1f, M=%.1f, S=%.1f\n",k,nt,dP,dQ,dx,dmu,dstd);
   end
 end
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+Mean = 0;
+Std = 1;
+x = %inf; // Inf
+[P, Q] = cdfnor("PQ", x, Mean, Std);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+x = -%inf; // -Inf
+[P, Q] = cdfnor("PQ", x, Mean, Std);
+assert_checkequal(P, 0);
+assert_checkequal(Q, 1);
+x = %nan; // NaN
+[P, Q] = cdfnor("PQ", x, Mean, Std);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index d621ea3..01450c5 100644 (file)
@@ -9,7 +9,9 @@
 // <-- CLI SHELL MODE -->
 // <-- ENGLISH IMPOSED -->
 
-// 
+// Run with test_run('statistics','cdfnor',['no_check_error_output']);
+
+//
 // References
 // Assessing the quality of the Normal distribution function
 // References
   
 // Table from Yalta, 2008.
 table = [
-  0.5 , 0.0 
-  1.e-1 , -1.28155 
-  1.e-2 , -2.32635 
-  1.e-3 , -3.09023 
-  1.e-4 , -3.71902 
-  1.e-5 , -4.26489 
-  1.e-6 , -4.75342 
-  1.e-7 , -5.19934 
-  1.e-15 , -7.94135 
-  1.e-16 , -8.22208 
-  1.e-100 , -21.2735 
-  1.e-197 , -29.9763 
-  1.e-198 , -30.0529 
-  1.e-300 , -37.0471 
+  0.5 , 0.0
+  1.e-1 , -1.28155
+  1.e-2 , -2.32635
+  1.e-3 , -3.09023
+  1.e-4 , -3.71902
+  1.e-5 , -4.26489
+  1.e-6 , -4.75342
+  1.e-7 , -5.19934
+  1.e-15 , -7.94135
+  1.e-16 , -8.22208
+  1.e-100 , -21.2735
+  1.e-197 , -29.9763
+  1.e-198 , -30.0529
+  1.e-300 , -37.0471
 ];
 
 precision = 1.e-5;
@@ -113,4 +115,22 @@ for k = 1 : nt
   end
 end
 
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+Mean = 0;
+Std = 1;
+
+x = %inf; // Inf
+[P, Q] = cdfnor("PQ", x, Mean, Std);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+
+x = -%inf; // -Inf
+[P, Q] = cdfnor("PQ", x, Mean, Std);
+assert_checkequal(P, 0);
+assert_checkequal(Q, 1);
 
+x = %nan; // NaN
+[P, Q] = cdfnor("PQ", x, Mean, Std);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index 9bab225..d864ebf 100644 (file)
@@ -7,11 +7,12 @@
 // =============================================================================
 // <-- CLI SHELL MODE -->
 // <-- ENGLISH IMPOSED -->
+// Run with test_run('statistics','cdfpoi',['no_check_error_output']);
 //
 // Assessing the quality of the Normal distribution function
 // References
 //   Yalta, A. T. 2008. The accuracy of statistical distributions in Microsoft®Excel 2007. Comput. Stat. Data Anal. 52, 10 (Jun. 2008), 4579-4586. DOI= http://dx.doi.org/10.1016/j.csda.2008.03.005 
-//   Computation of Statistical Distributions (ELV), Leo Knüsel 
+//   Computation of Statistical Distributions (ELV), Leo Knüsel
 // Table 4
 // Check Poisson distribution with parameters (lambda, k, Sigma)
 // If Sigma = 1, the cumulated distribution function is to be computed.
@@ -87,3 +88,15 @@ for k = 1 : nt
     mprintf("Test #%3d/%3d: Digits p1= %.1f, q1=%.1f, X=%.1f, Lambda=%.1f\n",k,nt,dP,dQ,dx,dl);
   end
 end
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+Xlam = 0;
+Std = 1;
+S = %inf; // Inf
+[P, Q] = cdfpoi("PQ", S, Xlam);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+S = %nan; // NaN
+[P, Q] = cdfpoi("PQ", S, Xlam);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index e309805..05f79e4 100644 (file)
@@ -9,11 +9,13 @@
 // <-- CLI SHELL MODE -->
 // <-- ENGLISH IMPOSED -->
 
+// Run with test_run('statistics','cdfpoi',['no_check_error_output']);
+
 //
 // Assessing the quality of the Normal distribution function
 // References
 //   Yalta, A. T. 2008. The accuracy of statistical distributions in Microsoft®Excel 2007. Comput. Stat. Data Anal. 52, 10 (Jun. 2008), 4579-4586. DOI= http://dx.doi.org/10.1016/j.csda.2008.03.005 
-//   Computation of Statistical Distributions (ELV), Leo Knüsel 
+//   Computation of Statistical Distributions (ELV), Leo Knüsel
 // Table 4
 // Check Poisson distribution with parameters (lambda, k, Sigma)
 // If Sigma = 1, the cumulated distribution function is to be computed.
@@ -95,4 +97,17 @@ for k = 1 : nt
   end
 end
 
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+Xlam = 0;
+Std = 1;
+
+S = %inf; // Inf
+[P, Q] = cdfpoi("PQ", S, Xlam);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
 
+S = %nan; // NaN
+[P, Q] = cdfpoi("PQ", S, Xlam);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index 934a65b..9c7b0f3 100644 (file)
@@ -1,12 +1,14 @@
 // =============================================================================
-// Tests for cdft() function
-//
-// Scilab Team
-// Copyright INRIA
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) ????-2008 - INRIA
 //
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// =============================================================================
+// Tests for cdft() function
 // using a table
-//
 // =============================================================================
+// Run with test_run('statistics','cdft',['no_check_error_output']);
 prec    = 1.e-5;
 Tab     = [0.9,0.5,0.3,0.20,0.10,0.05,0.02];
 Df      = [1,2,3,4,5,6,7];
@@ -19,3 +21,14 @@ Th1   = cdft("T",Df,P,Q);
 Df1   = cdft("Df",P,Q,Th);
 if norm(Th1-Th) > prec then bugmes();quit;end
 if norm(Df1-Df) > prec then bugmes();quit;end
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+Df       = 1;
+T        = %inf; // Inf
+[P,Q]    = cdfchi("PQ", T, Df);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+T        = %nan; // NaN
+[P,Q]    = cdfchi("PQ", T, Df);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);
index 8c457e1..f5f5d42 100644 (file)
@@ -10,6 +10,8 @@
 // using a table
 // =============================================================================
 
+// Run with test_run('statistics','cdft',['no_check_error_output']);
+
 prec    = 1.e-5;
 
 Tab     = [0.9,0.5,0.3,0.20,0.10,0.05,0.02];
@@ -26,3 +28,17 @@ Df1   = cdft("Df",P,Q,Th);
 
 if norm(Th1-Th) > prec then pause,end
 if norm(Df1-Df) > prec then pause,end
+
+// IEEE support
+// See http://bugzilla.scilab.org/show_bug.cgi?id=7296
+Df       = 1;
+
+T        = %inf; // Inf
+[P,Q]    = cdfchi("PQ", T, Df);
+assert_checkequal(P, 1);
+assert_checkequal(Q, 0);
+
+T        = %nan; // NaN
+[P,Q]    = cdfchi("PQ", T, Df);
+assert_checkequal(P, %nan);
+assert_checkequal(Q, %nan);